leo 移动机器人上面部署paddleocr 结合opencv实现动态文字识别

                      

前两步是在VM上用leo的ubuntu环境,直接使用leo机器人就跳过看第三步(建议直连leo机器人配置环境,而不是ssh)

leo机器人 如何联网在最下面

第一步:新建虚拟机,下载3个文件解压到同一个文件夹

第二步:打开虚拟机

第一次开启虚拟机的时候会弹出一个提示, 选择我已复制该虚拟机。

虚拟设备什么的选择否就行了

虚拟机密码eaibot

第三步:ssh 连接到leo上 检查版本python2(由于python2和python3的opencv有些许的差异,但是python3 会与Ros Kinetic冲突所以这边使用python2.7)一般来说是没什么问题的

检查python2版本

python2 –version11

      

第四步:下载编码工具(也可以跳过这步直接采用vim 或者gredit 或者 记事本 的方式编辑)

       Visual Studio Code - Code Editing. Redefined

下载Linux x64 .deb

弹出这个界面选择 Save File

下载可能需要很久

下载完毕后出现这个安装包,然后右键选择第一个也就是Open With Software install,出现界面后选择install 等待一会就安装成功了。

安装完毕后可能不会出现在左手边的菜单栏,可以在左上角白色小球那边搜索code 然后拖动到菜单栏

第五步:在小车上创建文件夹,我这边叫test 然后用touch camera.py 创建一个python文件

第六步:编码打开python文件  确保自己的摄像头可以使用再尝试,否则会报错,不确定可以移步第七步先安装pip

#-*- coding: utf-8 -*-         #让代码中有中文依旧可以正常运行

import numpy as np

import cv2                                 #引用cv2

cap = cv2.VideoCapture(0)         #把cap弄成一个摄像头的对象 默认设备号是0

while (True):

ret, frame = cap.read()     #cap.read()ret 是 true 或者 false 判断有没有获取到图像,frame 就是当前帧的图像

    if frame == None:

        print("Failed to turn on the camera")

    cv2.imshow('Camera', frame)      #imshow 展示frame “Camera”是运行窗口的名字,frame则是上述窗口需要展示的对象

    if cv2.waitKey(1) & 0xFF == ord('q'):  #waitkey的作用是延时和sleep一样的不过该单位是ms ,  0xFF == ord('q'):键盘输入q程序退出

        break

cap.release()#释放cap资源,否则再次运行该程序可能出现摄像头被占用

cv2.destroyAllWindows()

这份代码可以打开连接的摄像头

在上述运行代码的过程中很容易出现找不到摄像头的情况或者摄像头连接不上。见第七步pip下面的红色字体

第七步: 安装文字识别环境 PaddleOCR (没配置网络的话跳到第十步)

1.安装pip(python的下载工具)

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py(如果下载报错是超出时间的话换手机热点试试看)如果是因为摄像头而来的安装pip install cheese 一个查看摄像头的工具,然后在终端输入cheese便可以查看摄像头,如果出现没找到设备就是摄像头没有连接到虚拟机,如果是很长一串英文就是usb口没切换,具体见第五步

python get-pip.py

执行完上面2个命令后打开终端输入pip -V

版本一定要是20.3.4 太高了不支持python2

2.将Paddle开头的压缩包 复制到leo上并解压(最好拿u盘或者用xshell),出现

在该文件夹中打开终端安装paddle的环境支持

sudo python -m pip install paddlepaddle==1.8.5 -i https://mirror.baidu.com/pypi/simple

输入这行命令,稍等片刻会下载完一系列文件,并且出现报错但是

仔细看看是安装opencv时候报错,单独下载就好了

pip2 install opencv-python==3.4.0.12 -i https://mirror.baidu.com/pypi/simple

下载的时候如果清华源太慢了就换阿里或者中科院的吧

虽然后续没有报错但是还是需要将一些库的版本换成适配的

pip install shapely -i https://mirror.baidu.com/pypi/simple

pip install imgaug -i https://mirror.baidu.com/pypi/simple (这一步完后会报错)

无非就是版本不对

pip install pyclipper -i https://mirror.baidu.com/pypi/simple

pip install lmdb -i https://mirror.baidu.com/pypi/simple

pip install tqdm -i https://mirror.baidu.com/pypi/simple

pip install numpy -i https://mirror.baidu.com/pypi/simple

pip install matplotlib==2.0.0 -i https://mirror.baidu.com/pypi/simple

这步结束后再一次执行

sudo python -m pip install paddlepaddle==1.8.5 -i https://mirror.baidu.com/pypi/simple

会发现protobuf 这个包版本不对

pip uninstall protobuf

pip install protobuf==3.14.0 -i https://mirror.baidu.com/pypi/simple

pip install pillow==4.3.0 -i https://mirror.baidu.com/pypi/simple

(由于每个人操作不一定相同,建议在每个包安装后都执行 sudo python -m pip install paddlepaddle==1.8.5 -i https://mirror.baidu.com/pypi/simple,有些时候虽然报错,但是只是不同库的版本不兼容导致的,还是可以正常使用框架)

最后一次

sudo python -m pip install paddlepaddle==1.8.5 -i https://mirror.baidu.com/pypi/simple

就顺利安装了

如何使用呢

在PaddleOCR1.1目录下,打开终端

python tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/det/"  --rec_model_dir="./inference/rec/" --cls_model_dir="./inference/cls/" --use_angle_cls=True --use_space_char=True  --use_gpu=False

image_dir是文字识别图片的路径

det,rec,cls都是模型的路径,可以不用去修改他,如果打算在paddleoc1,1的文件外边使用这段代码的话需要将./改成绝对路径而不是相对

ps:如果按部就班的操作最后还是出现了GLIBCXX报错,下载给予压缩包里面的libstdc++.so.6

先删除原文件

sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6

然后复制新的libstdc++.so.6到/usr/lib/x86_64-linux-gnu/目录

复制过后的libstdc++.so.6文件需要给权限。复制的命令是sudo cp 文件名 路径

sudo chmod 777 /usr/lib/x86_64-linux-gnu/libstdc++.so.6

第八步:如何将ocr和opencv结合起来

python自带的库中有个os.system的函数,该函数是相当于在命令行中输入语句

便可以像这样使用

要想实现让摄像头实时的识别文字,我们只需要将frame 动态的保存在本地,然后让ocr去不断识别,

小小写了个案例,不过这样的处理速度很慢,摄像头看上去就会很卡。也可以在后面弄个类似按到q就关闭程序的办法弄一个按某个键就进行扫描

#-*- coding: utf-8 -*-         #让代码中有中文依旧可以正常运行

import numpy as np

import os

import cv2                                                      #引用cv2

cap = cv2.VideoCapture(0)         #把cap弄成一个摄像头的对象 默认设备号是0

while (True):

    ret, frame = cap.read()     #cap.read()ret 是 true 或者 false 判断有没有获取到图像,frame 就是当前帧的图像

    # if frame == None:

    #     print("Failed to turn on the camera")

    cv2.imshow('Camera', frame)      #imshow 展示frame “Camera”是运行窗口的名字,frame则是上述窗口需要展示的对象

    cv2.imwrite("./1.jpg",frame)#保存图片到相对路径的1,jpg

    os.system('python ./tools/infer/predict_system.py --image_dir="1.jpg" --det_model_dir="./inference/det/"  --rec_model_dir="./inference/rec/" --cls_model_dir="./inference/cls/" --use_angle_cls=True --use_space_char=True  --use_gpu=False')

    if cv2.waitKey(1) & 0xFF == ord('q'):  #waitkey的作用是延时和sleep一样的不过该单位是ms ,  0xFF == ord('q'):键盘输入q程序退出

        break

cap.release()#释放cap资源,否则再次运行该程序可能出现摄像头被占用

cv2.destroyAllWindows()#关闭所有窗口

第九步:获取输出

在观察启动ocr的命令中提到了./tools/infer/predict_system.py这个py文件,在155行的text_str 这个就是识别到的文字,通过对这个的改动就可以获取需要的文字

第十:leo如何连接网络

  1. 找个显示屏,将HDMI线连接机器人尾部和显示屏
  2. 在机器人上插入键盘鼠标(支持蓝牙)

  1. 显示屏打开后分辨率可能有点问题

          打开右上角的小齿轮,有个系统设置,里面有个显示,在这里可以调整分辨率

  1. 连接网络

打开火狐浏览器输入192.168.31.1 会出现路由器的管理界面

在左边选择无线中继,并且选择热点信号放大(如果没搜到自己的热点信号,热点信号改成2.4g频段的,leo是不接受5g的频段,还是没有的话换个人热点试试看)

连上后,点击右下角确定。就可以上网咯

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值