34454浏览
查看: 34454|回复: 0

基于行空板的pytesseract传统人物识别

[复制链接]
一、实践目标
本项目在行空板上外接USB摄像头,通过摄像头来识别人物名字。

二、知识目标
学习使用pytesseract库进行文字识别的方法。

三、实践准备
硬件清单:
基于行空板的pytesseract传统人物识别图5

软件使用:Mind+编程软件x1

四、实践过程
1、硬件搭建
1、将摄像头接入行空板的USB接口。

基于行空板的pytesseract传统人物识别图4

2、通过USB连接线将行空板连接到计算机。

基于行空板的pytesseract传统人物识别图7

2、软件编写
第一步:打开Mind+,远程连接行空板

基于行空板的pytesseract传统人物识别图2

第二步:在“行空板的文件”中新建一个名为AI的文件夹,在其中再新建一个名为“基于行空板的pytesseract传统人物识别”的文件夹,导入本节课的依赖文件。

基于行空板的pytesseract传统人物识别图3

第三步:编写程序
在上述文件的同级目录下新建一个项目文件,并命名为“main.py”。
示例程序:
  1. #  -*- coding: UTF-8 -*-
  2. # MindPlus
  3. # Python
  4. import sys
  5. sys.path.append("/root/mindplus/.lib/thirdExtension/nick-pytesseract-thirdex")
  6. # from pinpong.board import Board
  7. from pinpong.board import Board,Pin
  8. from pinpong.extension.unihiker import *
  9. # from pinpong.libs.dfrobot_speech_synthesis import DFRobot_SpeechSynthesis_I2C
  10. import time
  11. import cv2
  12. import pytesseract
  13. from PIL import Image,ImageFont,ImageDraw
  14. import os
  15. import numpy as np
  16. Board().begin()
  17. # p_gravitysynthesis = DFRobot_SpeechSynthesis_I2C()# 语音合成
  18. # p_gravitysynthesis.begin(p_gravitysynthesis.V2)
  19. def drawChinese(text,x,y,size,r, g, b, a,img):
  20.     font = ImageFont.truetype("HYQiHei_50S.ttf", size)
  21.     img_pil = Image.fromarray(img)
  22.     draw = ImageDraw.Draw(img_pil)
  23.     draw.text((x,y), text, font=font, fill=(b, g, r, a))
  24.     frame = np.array(img_pil)
  25.     return frame
  26. pytesseract.pytesseract.tesseract_cmd = r'/usr/bin/tesseract'
  27. cap = cv2.VideoCapture(0)
  28. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 240)
  29. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 320)
  30. cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
  31. cv2.namedWindow('cvwindow',cv2.WND_PROP_FULLSCREEN)
  32. cv2.setWindowProperty('cvwindow', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
  33. while not cap.isOpened():
  34.     continue
  35. print("start!")
  36. ShiBieNaRong = ''
  37. img_word1 = ''
  38. img_word2 = ''
  39. while True:
  40.     cvimg_success, img_src = cap.read()
  41.     cvimg_h, cvimg_w, cvimg_c = img_src.shape
  42.     cvimg_w1 = cvimg_h*240//320
  43.     cvimg_x1 = (cvimg_w-cvimg_w1)//2
  44.     img_src = img_src[:, cvimg_x1:cvimg_x1+cvimg_w1]
  45.     img_src = cv2.resize(img_src, (240, 320))
  46.     cv2.imshow('cvwindow', img_src)
  47.     key = cv2.waitKey(5)
  48.     if key & 0xFF == ord('b'): # Press the "a" key on Unihiker will stop the program.
  49.         print("退出视频")
  50.         break
  51.     # if (button_a.is_pressed()==True):
  52.     elif key & 0xFF == ord('a'):
  53.         ShiBieNaRong = []
  54.         try:
  55.             if not os.path.exists("/root/image/pic/"):
  56.                 print("The folder does not exist,created automatically")
  57.                 os.system("mkdir -p /root/image/pic/")
  58.         except IOError:
  59.             print("IOError,created automatically")
  60.             break
  61.         cv2.imwrite("/root/image/pic/image.png",img_src)
  62.         time.sleep(0.2)
  63.         img = Image.open('/root/image/pic/image.png')
  64.         ShiBieNaRong = pytesseract.image_to_string(img, lang='chi_sim')[0:2]
  65.         print(ShiBieNaRong)
  66.     img_src = drawChinese(text=str(ShiBieNaRong),x=10, y=20,size=25,r= 50,g=200,b=0,a=0,img=img_src)
  67.     cv2.imshow('cvwindow', img_src)
  68. cap.release() # Release usb camera. # 释放摄像头
  69. cv2.destroyAllWindows() # Destory all windows created by opencv. # 关闭所有窗口
复制代码

3、运行调试
第一步:安装依赖库
运行pytesseract目录下1-Install_dependency.py程序文件,安装各个依赖库。

基于行空板的pytesseract传统人物识别图1

第二步:运行主程序
运行“main.py”程序,可以看到初始时屏幕上显示着摄像头拍摄到的实时画面,将摄像头画面对准任务名字,如这里为孔子,然后按下板载按键a,将此帧图像拍摄保存,之后自动识别图像上的文字,在Mind+软件终端,我们可以看到识别到的中文结果。

基于行空板的pytesseract传统人物识别图6

Tips:拍摄的图片保存在/root/image/pic这个路径下。

4、程序解析
这段程序通过使用OpenCV库调用摄像头,实时从摄像头读取图像,然后使用Tesseract进行OCR识别并将结果显示在图像上。具体流程如下:

①初始化:程序启动时,会导入所需的库,初始化UNIHIKER开发板,配置Tesseract命令路径,打开默认的摄像头设备,并设置摄像头的分辨率和缓冲区大小。接着,创建一个全屏窗口用于显示图像。
②定义函数:定义一个用于在图像上绘制中文字符的函数drawChinese。
③主循环:程序进入一个无限循环,在每次循环中,程序会执行以下操作:
· 从摄像头读取一帧。如果读取失败,则继续下一次循环。
· 检查按键事件:
· 如果按下'b'键,程序退出循环。
· 如果按下'a'键,程序捕获当前图像并保存到指定路径,然后使用Tesseract识别图像中的中文字符,并将结果打印到终端。
· 在图像上绘制识别到的中文字符,并在窗口中显示处理后的图像。
④结束:当主循环结束时,程序会释放摄像头设备,并关闭所有OpenCV窗口。

五、知识园地
1. 了解pytesseract库
pytesseract 是 Tesseract OCR 引擎的 Python 封装库,用于从图像中提取文本。它提供了简便的接口,使得在 Python 程序中能够轻松实现光学字符识别(OCR)。

功能
1. 图像文字识别:从各种图像格式(如 PNG、JPEG、BMP 等)中提取文本。
2. 多语言支持:能够识别多种语言的文本。
3. 布局分析:处理复杂文档布局,包括多列文本和表格。
4. 位置信息提取:提供识别到的字符或单词在图像中的位置坐标。
5. 多种输出格式:支持纯文本、字典格式、HOCR(HTML OCR)格式等。

特点
1. 开源免费:基于开源的 Tesseract OCR 引擎,免费使用。
2. 跨平台:支持 Windows、macOS 和 Linux 系统。
3. 高准确性:Tesseract 引擎经过多年的开发和优化,具有较高的识别准确性。
4. 易于集成:提供简单的 Python 接口,便于与其他 Python 项目和库集成。


Project.zip

9.61 MB, 下载次数: 458

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail