opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警

  1. 安装python,pycharm,自行安装。

  2. Python下安装OpenCv
    2.1 打开cmd,先安装opencv-python

pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 再安装opencv-contrib-python

pip install opencv-contrib-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple

3.Pycharm安装opencv-python
打开pycharm,然后打开setting,打开python解析器
在这里插入图片描述
点击Go to tool window。下面红框处管理和下载python依赖包
在这里插入图片描述
点击下图的设置,然后点击管理仓库
在这里插入图片描述
新增python包仓库: https://pypi.tuna.tsinghua.edu.cn/simple/
在这里插入图片描述
在这里搜索并下载opencv-python,numpy在这里插入图片描述
下载完成,新建py文件,执行代码。有窗口输出该路径的图片就说明成功了。

import cv2 as cv# 这段代码是测试opencv是否正常安装。运行下面这段代码出现图片就是成功的
src = cv.imread("C:\\Users\Administrator\Desktop\\city1.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
cv.waitKey(0)
cv.destroyAllWindows()
print("hi python")
  1. 下载Tesseract OCR,去官网 https://github.com/UB-Mannheim/tesseract/wiki
    下载exe。安装完成后,需要设置Tesseract-OCR的系统环境。详细看这篇文章
    https://blog.csdn.net/qq_38463737/article/details/109679007

  2. 下载Tesseract OCR的语言包,中文语言包和英文语言包。
    去官网 https://github.com/tesseract-ocr/tessdata 下载eng.traineddata和chi_sim.traineddata
    在这里插入图片描述
    然后把那两个文件放到**/Tesseract-OCR/tessdata
    在这里插入图片描述

  3. pycharm 的python包 安装pytesseract
    在这里插入图片描述

  4. 在项目文件.venv/Lib/site-packages/pytesseract/pytesseract.py 文件中修改变量tesseract_cmd,路径自行修改。 这是为了解决BUG:”tesseract is not installed or it‘s not in your PATH“
    在这里插入图片描述

  5. 安装gTTS 谷歌语音播报,pillow,pyttsx3 离线语音播报。
    在这里插入图片描述

  6. 在手机上下载“IP 摄像头”,并安装。这里我在应用宝里下载了 IP 摄像头。使用该软件,要电脑连接手机热点,同处在局域网内。
    在这里插入图片描述
    10,全部py代码如下

# 本代码参考了https://blog.csdn.net/weixin_35752233/article/details/142606296  , https://blog.csdn.net/m0_58892312/article/details/120923578 和 AI
# 人脸模型库文件“ haarcascade_frontalface_default.xml ”,帮助摄像头获取的画面去对比
# 1. 第二句代码中的admin为我的IP摄像头用户名, admin为我的IP摄像头密码,这个可以在手机APP的设置里查看和修改,代码中的要使用自己的用户名、密码。
# 2. @后面的地址是局域网IP地址,这个在打开IP摄像头服务器之后的界面就能看到,也需要修改为自己的地址。
# 3.代码的其他部分无需修改。
import time
import cv2 as cv
import pytesseract
import numpy as np
import pyttsx3
from gtts import gTTS# 图像的裁剪和缩放是图像预处理的两个基本操作。裁剪主要是根据需要对图像的特定区域进行选取,剔除无效或干扰信息。缩放则是为了满足特定的分辨率或图像尺寸需求,对图像的大小进行调整。
# 裁剪图片
def crop_image(image, x, y, width, height):return image[y:y + height, x:x + width]# 缩放图片
def resize_image(image, width, height):return cv.resize(image, (width, height))# 灰度化.        图像的灰度化和二值化是将图像从彩色转换到灰度图像和黑白图像的过程,这些转换对于提高OCR的准确性和效率至关重要。
def to_grayscale(image):return cv.cvtColor(image, cv.COLOR_BGR2GRAY)# 二值化.
def to_binary(image, threshold=127, maxval=255):return cv.threshold(image, threshold, maxval, cv.THRESH_BINARY)[1]# 噪声去除是图像预处理中非常重要的一步。它通常通过滤波技术实现,可以减少图像中的随机噪声,提高图像质量,有助于后续的文字检测和识别。
def remove_noise(image, kernel_size=3):return cv.medianBlur(image, kernel_size)# 文本行检测                     和字符分割是预处理的高级步骤,它们是为了从图像中准确地分离出单独的字符或文本行,这对于OCR识别至关重要。
def detect_text_lines(image):# 使用Canny边缘检测算法edged = cv.Canny(image, 100, 200)# 找到轮廓contours, _ = cv.findContours(edged, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)return contours# 字符分割
def segment_characters(image, contours):characters = []for contour in contours:x, y, w, h = cv.boundingRect(contour)roi_image = image[y:y + h, x:x + w]characters.append(roi_image)return characters# 识别并截取红色区域
def extract_red_region(image):# 转换为HSV颜色空间hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)# 定义红色的范围lower_red = np.array([0, 120, 70])upper_red = np.array([10, 255, 255])mask1 = cv.inRange(hsv, lower_red, upper_red)lower_red = np.array([170, 120, 70])upper_red = np.array([180, 255, 255])mask2 = cv.inRange(hsv, lower_red, upper_red)# 合并两个掩码mask = mask1 + mask2# 形态学操作kernel = np.ones((5, 5), np.uint8)mask = cv.morphologyEx(mask, cv.MORPH_CLOSE, kernel)mask = cv.morphologyEx(mask, cv.MORPH_OPEN, kernel)return mask# 文字保存为临时mp3文件
def text_to_speech(text, lang='en'):# 创建gTTS对象tts = gTTS(text=text, lang=lang)# 保存为临时文件temp_file = "temp_audio.mp3"tts.save(temp_file)return temp_file# 读取视频信息。 # @前为账号密码,@后为ip地址
cap = cv.VideoCapture("http://admin:admin@192.168.169.143:8081/video")
# cap = cv.VideoCapture(0)
while cap.isOpened():# 读取一帧图片f, image = cap.read()# 保存当前帧为图片文件cv.imwrite('captured_image.jpg', image)print("图片已保存为 captured_image.jpg")time.sleep(0.5)# 项目相对路径下captured_image.jpg,自行修改文件路径picture = cv.imread("D:\\download_software\\python_project\\camera_test\\captured_image.jpg")# 提取红色区域 -> 红色底纹白颜色文字red_mask = extract_red_region(picture)# 查找轮廓contours, _ = cv.findContours(red_mask, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)for contour in contours:x, y, w, h = cv.boundingRect(contour)roi = picture[y:y + h, x:x + w]# ps:没有必要灰度处理和二值化处理,因为红色区域的图像已经很清楚了# # 转换为灰度图像# gray_picture = cv.cvtColor(roi, cv.COLOR_BGR2GRAY)# # 二值化处理# _, binary_picture = cv.threshold(gray_picture, 200, 255, cv.THRESH_BINARY_INV)# 使用Tesseract OCR识别文字text = pytesseract.image_to_string(roi, config='--psm 6',lang="eng")print("OCR识别结果:" + text)cv.imshow("Red Region", roi)# 如果文本包含MAU或者AHU,播放mp3语音进行报警if "MAU" in text or "AHU" in text:# 创建语音引擎engine = pyttsx3.init()# 进行语音播报 指定要播报的文本engine.say(text)# 阻止 没播报完程序就退出engine.runAndWait()# 使用OpenCV的自定义函数进行图像预处理# # 设定裁剪区域的坐标和尺寸# x, y, width, height = 100, 100, 200, 200# cropped_image = crop_image(image, x, y, width, height)## # 设定缩放尺寸# new_width, new_height = 300, 300# resized_image = resize_image(cropped_image, new_width, new_height)# 读取图片并转换为灰度图# gray_picture = cv.cvtColor(picture, cv.COLOR_BGR2GRAY)# 读取图片并进行二值化# _, binary_picture = cv.threshold(gray_picture, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)# 读取图片并去除噪声# noise_free_picture = remove_noise(binary_picture)# 使用Tesseract进行OCR处理     chi_sim | eng# text = pytesseract.image_to_string(noise_free_picture,lang="eng")# 打印OCR结果# print("OCR识别结果:" + text)# cv.imshow("Video Stream", picture)#退出视频识别if cv.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv.destroyAllWindows()
  1. 运行效果展示。我手机的IP摄像头拍摄正对着wps那块区域,识别出来的红色区域在左上角。因为OCR识别使用我用的是english语言包,所以识别文字内容不太准确,汉字没有识别出来,但是我这里的需求只要识别英文单词就可以了。此时,电脑正在播放识别出来的文字内容。大致需求已经实现了。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484260.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[报错] Error: PostCSS plugin autoprefixer requires PostCSS 8 问题解决办法

报错:Error: PostCSS plugin autoprefixer requires PostCSS 8 原因:autoprefixer版本过高 解决方案: 降低autoprefixer版本 执行:npm i postcss-loader autoprefixer8.0.0 参考: Error: PostCSS plugin autoprefix…

Go学习:编译器(编写程序时应该注意的点)

一、注意: LiteIDE工具: (1)创建项目后,同一个目录下的go文件 只能有一个 main函数,如果多个文件都有main函数,会出现编译错误。例如: (2)如果一个目录下多…

自然语言处理期末试题汇总

建议自己做,写完再来对答案。答案可能存在极小部分错误,不保证一定正确。 一、选择题 1-10、C A D B D B C D A A 11-20、A A A C A B D B B A 21-30、B C C D D A C A C B 31-40、B B B C D A B B A A 41-50、B D B C A B B B B C 51-60、A D D …

市场爆火的“生成式AI大模型”证书如何报考?

随着科技的飞速发展,生成式人工智能正以前所未有的速度渗透到各行各业。从创作艺术、生成音乐到推动虚拟世界的构建,这项技术以其卓越的创新能力改变了传统的生产和创意模式。生成式人工智能不仅仅是数据的复制和再现,而是通过算法实现内容的…

Electron-vue 框架升级 Babel7 并支持electron-preload webapck 4 打包过程记录

前言 我这边一直用的electron-vue框架是基于electron 21版本的,electron 29版本追加了很多新功能,但是这些新功能对开发者不友好,对electron构建出来的软件,使用者更安全,所以,我暂时不想研究electron 29版…

浏览器渲染流程

1.渲染模式 标准模式和怪异模式(Quirks Mode)是两种不同的文档渲染模式,用于指示浏览器如何解析HTML、CSS等页面内容。标准模式是指浏览器按照W3C规范的流程进行解析和渲染网页,这样可以确保不同浏览器对同一份代码的渲染结果基本…

ElementUI 问题清单

1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为&#xff0c;给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…

ArcGIS求取多个点距离线要素的最近距离以及距离倒数

本文介绍在ArcMap软件中&#xff0c;对于点要素中的每一个点&#xff0c;求取其距离最近的道路的距离、距离倒数的方法。 首先&#xff0c;看一下本文的需求。现在已知一个点要素&#xff0c;其中含有多个点&#xff0c;假设每一个点表示城市中的一家商店&#xff1b;同时&…

【数据库系列】Spring Boot如何配置Flyway的回调函数

Flyway 提供了回调机制&#xff0c;使您能够在特定的数据库迁移事件发生时执行自定义逻辑。通过实现 Flyway 的回调接口&#xff0c;可以在迁移前后执行操作&#xff0c;如记录日志、执行额外的 SQL 语句等。 1. 创建自定义回调类 要配置 Flyway 的回调函数&#xff0c;需要创…

网络安全(1)_对称加密和非对称加密

1 网络安全概述 1.1 计算机网络面临的安全威协 &#xff08;1&#xff09;截获&#xff1a;攻击者从网络上窃听他人的通信内容&#xff0c;通常把这类攻击称为“截获”。在被动攻击中&#xff0c;攻击者只是观察和分析某一个协议数据单元&#xff08;PDU&#xff09;而不干扰信…

【查询基础】.NET开源 ORM 框架 SqlSugar 系列

&#x1f4a5; .NET开源 ORM 框架 SqlSugar 系列 &#x1f389;&#x1f389;&#x1f389; 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…

计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

C语言——指针基础

1 指针基础 怎么获得变量地址 1 如何产生一个指针变量——>类型* 标识符;int* p1;char* p2;double* p3;//不同类型的基本指针占用内存是一样的都是4个字节&#xff08;32位&#xff09;/8个字节&#xff08;64位&#xff09;&#xff0c;都是存的地址2 数组名是数组首地址…

Python语法基础---正则表达式

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们这个文章所讲述的&#xff0c;也是数据分析的基础文章&#xff0c;正则表达式 首先&#xff0c;我们在开始之前&#xff0c;引出一个问题。也是我们接下来想要解决的问题。…

网络练级宝典-> UDP传输层协议

目录 传输层 端口号 端口号和进程的关系 UDP协议 UDP协议格式 UDP数据封装&#xff1a; UDP数据分用&#xff1a; 面向数据报 UDP的缓冲区 UDP的缺点 基于UDP的应用层协议 传输层 端口号 我们知道端口号对应的其实就是一个进程的pid&#xff0c;在操作系统中二者的…

容器运行应用及Docker命令

文章目录 一、使用容器运行Nginx应用1_使用docker run命令运行Nginx应用1 观察下载容器镜像过程2 观察容器运行情况 2_访问容器中运行的Nginx服务1 确认容器IP地址2 容器网络说明3 使用curl命令访问 二、Docker命令1_Docker命令获取帮助方法2_Docker官网提供的命令说明3_docker…

JDK17 下载与安装

下载安装包 针对不同的操作系统, 需要下载对应版本的 JDK. 如果电脑是 Windows32 位的, 建议重装系统, 重装成 64 位的操作系统. 因为 Java 从 9 版本开始, 就已经不提供 32 位版本的安装包了. 官网下载 官网下载链接 需要登录 Oracle 账号才能下载. 账号: 2872336204qq.c…

6.1 innoDb逻辑存储结构和架构-简介

InnoDB 是 MySQL 默认的存储引擎&#xff0c;以其强大的事务支持、崩溃恢复能力和高效的数据处理能力广受欢迎。本文从逻辑存储结构、内存架构、磁盘结构到后台线程&#xff0c;逐步剖析 InnoDB 的关键概念&#xff0c;帮助您更好地理解和应用。 1. 逻辑存储结构 InnoDB 的数据…

SpringBoot小知识(4):高级配置知识与bean的绑定

一、EnableConfigurationProperties ConfigurationProperties注解在我们之前讲过&#xff0c;他是从配置中读取参数封装给实体类的一个注解。 那么EnableConfigurationProperties是个啥呢&#xff1f; EnableConfigurationProperties 是 Spring Framework 中用于启用基于配置文…

Vue 实现无线滚动效果

目录 1.Element-plus官网中的Infinite Scroll组件说明 2.滚动条设置 3.滚动到底部的函数调用 1.Element-plus官网中的Infinite Scroll组件说明 官网链接如下所示&#xff1a; Infinite Scroll 无限滚动 | Element Plus 首先查看该代码&#xff0c;发现这个组件使用了一个…