一、定义及第三方库的说明
- OCR (光学字符识别)文字识别、图像识别
- mjpg-streamer实时流式传输视频工具
- 树莓派mjpg-streamer
Face Recognition人脸识别
- Dlib 计算机视觉问题的工具和算法
- face_recognition库
- OpenCV 计算机视觉和机器学习的开源库
三、香橙派USB摄像头测试
四、face_recognition 人脸识别库的安装和测试方法
五、face_recognition 的测试方法
一、定义及第三方库的说明
OCR (光学字符识别)文字识别、图像识别
OCR(光学字符识别)是一种通过计算机对图像或文档进行分析,将其中的文字转换为可编辑文本的技术。以下是使用 OCR 的一般步骤:
-
选择 OCR 工具:
选择适合你需求的 OCR 工具或库。有一些开源和商业 OCR 工具可供选择,例如 Tesseract、OCRopus、Adobe Acrobat等。 -
安装 OCR 工具:
根据你选择的 OCR 工具,安装相应的软件或库。以 Tesseract 为例,在 Ubuntu 上可以使用以下命令安装:sudo apt-get install tesseract-ocr
-
获取图像或文档:
准备包含文本的图像或文档。这可以是扫描的文档、图片中的文字等。 -
使用 OCR 进行识别:
使用选择的 OCR 工具对图像或文档进行识别。以 Tesseract 为例,你可以使用以下命令:tesseract image.png output.txt
这将识别
image.png
中的文本,并将结果保存到output.txt
文件中。 -
处理结果:
处理 OCR 的结果。结果可能需要进一步的校正、格式化或其他处理,以满足你的需求。
注意,OCR 的准确性受到图像质量、文本清晰度、字体等因素的影响。在使用 OCR 时,通常需要进行一些预处理,如图像清晰度的调整、去除噪声等,以提高识别准确性。
每个 OCR 工具都有其独特的使用方式和参数,因此在使用时请查阅相应工具的文档以获取详细的指导。
mjpg-streamer实时流式传输视频工具
mjpg-streamer 是一个用于实时流式传输视频的开源工具,通常用于将 USB 摄像头或其他视频源的视频流嵌入到 Web 页面中。它能够生成 Motion-JPEG(MJPEG)流,支持浏览器中的实时视频查看。
以下是使用 mjpg-streamer 的基本步骤:
-
安装 mjpg-streamer:
在 Ubuntu 或其他基于 Debian 的系统上,你可以使用以下命令安装 mjpg-streamer:sudo apt-get install mjpg-streamer
请注意,mjpg-streamer 还有一些插件和依赖项,具体取决于你的使用场景。你可能需要根据项目的要求安装额外的插件。
-
启动 mjpg-streamer:
使用以下命令启动 mjpg-streamer。注意,这只是一个基本的启动命令,你可能需要根据你的摄像头和使用情况进行调整:mjpg_streamer -i "input_uvc.so" -o "output_http.so -p 8080"
这将使用摄像头作为输入,并在端口 8080 上启动 HTTP 服务器。
-
在浏览器中查看视频流:
打开 Web 浏览器,并访问http://localhost:8080
(或你指定的端口)。你应该能够在浏览器中看到摄像头的实时视频流。
请注意,上述步骤是一个简单的示例,实际上你可能需要根据你的摄像头类型、分辨率、使用场景等调整命令参数。mjpg-streamer 提供了丰富的配置选项,你可以根据需要查看其文档进行详细配置。
树莓派mjpg-streamer
树莓派3B + Pi摄像头 + mjpg-streamer
这些命令用于在基于 Debian 的系统(例如 Ubuntu)上安装一些图像处理和开发所需的库和工具。让我们逐个解释这些命令:
-
安装 JPEG 支持库:
sudo apt-get install libjpeg8-dev
该命令安装 libjpeg8-dev 库,这是 JPEG 图像格式的支持库。
-
安装 ImageMagick:
sudo apt-get install imagemagick
ImageMagick 是一个用于处理图像的开源软件套件。该命令安装 ImageMagick 软件包。
-
安装 libv4l 开发库:
sudo apt-get install libv4l-dev
该命令安装 libv4l-dev,这是 Video4Linux(V4L)的开发库,用于支持视频设备的开发。
-
安装 CMake 编译工具:
sudo apt-get install cmake
该命令安装 CMake,这是一个跨平台的构建工具,用于配置、构建和测试项目。
请确保在执行这些命令之前,你的系统已连接到互联网,以便从软件仓库中下载这些软件包。如果你有特定的项目需要这些库,通常项目的文档或 README 文件会提供更详细的指导。
Face Recognition人脸识别
人脸识别在计算机科学领域中通常被称为 “Face Recognition”。人脸识别是一种通过计算机视觉技术识别和验证图像或视频中的人脸的方法。这一技术可以用于许多应用,包括身份验证、访问控制、安全监控、表情分析等。
在实际应用中,有多种开源和商业人脸识别库和框架可供选择,其中一些可能使用不同的术语或名称。例如,OpenCV(Open Source Computer Vision Library)是一个流行的计算机视觉库,它提供了用于人脸识别的功能,而 Dlib 是另一个强大的 C++ 库,也包括人脸识别的功能。
总的来说,“人脸识别” 是一个广泛接受的术语,用于描述通过计算机技术自动检测和识别人脸的过程。
face_recognition的使用
定位人脸,人脸识别,识别单张图片中人脸的关键点,识别人脸并使用方框标注,比较两个人脸是否属于一个人,识别未知图片中的人脸是谁,识别 USB 摄像头中的人脸,使用 Web 服务上传图片运行人脸识别,face_detection 命令测试示例
Dlib 计算机视觉问题的工具和算法
Dlib 是一个用 C++ 编写的跨平台机器学习工具包。它包含了用于解决多种机器学习和计算机视觉问题的工具和算法。Dlib 的主要特点和功能包括:
-
图像处理:
Dlib 提供了一系列用于图像处理的工具和算法,包括图像过滤、形状检测、直方图等。 -
机器学习:
Dlib 包含了支持向量机(SVM)、最小二乘回归(LSTMs)、深度学习等多种机器学习算法。它还包括一些预训练的模型,用于人脸检测、姿势估计等任务。 -
计算机视觉:
Dlib 提供了用于计算机视觉任务的工具,包括人脸检测、特征点检测、人脸识别等。其人脸检测和人脸关键点检测的功能非常强大。 -
人脸识别和人脸特征:
Dlib 的人脸识别模块是其最为著名的部分之一。它包括了用于人脸检测、人脸关键点检测、人脸识别和人脸特征提取的工具。 -
形状预测:
Dlib 提供了一些工具和算法,用于形状预测和形状模型。 -
跨平台支持:
Dlib 支持多个平台,包括 Windows、Linux、macOS。 -
开源:
Dlib 是一个开源项目,其代码可在 GitHub 上获取,而且它有一个活跃的社区,支持和改进不断进行。 -
高性能:
Dlib 的代码经过高度优化,注重性能,并且在多种计算机视觉任务中表现出色。
要使用 Dlib,你需要下载并编译 Dlib 库,然后在你的项目中引入相应的头文件和链接库。在 C++ 中,你可以使用 Dlib 提供的 API 来实现各种机器学习和计算机视觉任务。如果你使用的是 Python,Dlib 也提供了 Python 接口。
face_recognition库
face_recognition
库是基于 Dlib 的一个简化人脸识别任务的 Python 库。它封装了 Dlib 的人脸识别和特征点检测功能,提供了一个更简单易用的接口。以下是在 Python 中使用 face_recognition
和 Dlib 进行基本人脸识别的步骤:
-
安装
face_recognition
库:
在终端中运行以下命令安装face_recognition
库:pip install face_recognition
这会自动安装 Dlib、NumPy 和 Click 等相关依赖。
-
编写人脸识别代码:
创建一个 Python 文件,并编写使用face_recognition
的代码。以下是一个简单的示例,用于在一张图片中识别人脸并在识别的人脸周围绘制矩形:import face_recognition import cv2 # 加载图像 image = face_recognition.load_image_file("path_to_your_image.jpg") # 查找图像中的所有人脸 face_locations = face_recognition.face_locations(image) # 用 OpenCV 读取图像 img = cv2.imread("path_to_your_image.jpg") # 在每个人脸周围绘制矩形 for face_location in face_locations: top, right, bottom, left = face_location cv2.rectangle(img, (left, top), (right, bottom), (0, 255, 0), 2) # 显示结果图像 cv2.imshow("Face Recognition", img) cv2.waitKey(0) cv2.destroyAllWindows()
请确保将
"path_to_your_image.jpg"
替换为你实际使用的图像路径。 -
运行代码:
保存上述代码到一个文件(例如,face_recognition_example.py
)并在终端中运行:python face_recognition_example.py
这将显示带有人脸矩形的图像。
请注意,face_recognition
提供了更高级的功能,如人脸识别、比较人脸特征等。你可以查阅 face_recognition
和 Dlib 的文档以获取更多详细信息和示例。
OpenCV 计算机视觉和机器学习的开源库
OpenCV(Open Source Computer Vision Library)是一个用于计算机视觉和机器学习的开源库。它提供了丰富的图像处理和计算机视觉算法,涵盖了从简单的图像处理任务到复杂的计算机视觉问题的各个方面。以下是 OpenCV 库的一些主要特征和功能:
-
图像处理:
OpenCV 提供了许多用于图像处理的函数和算法,包括图像过滤、边缘检测、直方图均衡化、图像变换等。 -
计算机视觉:
OpenCV 包含了一系列计算机视觉算法,例如目标检测、人脸识别、特征匹配、物体跟踪等。它支持多种计算机视觉任务,并提供了已经训练好的模型。 -
机器学习:
OpenCV 集成了一些机器学习算法,包括支持向量机(SVM)、k-最近邻(KNN)、决策树等。这些算法可用于分类、回归和聚类等任务。 -
摄像机标定和几何变换:
OpenCV 包括用于摄像机标定、图像矫正和几何变换的工具。这对于计算机视觉中的相机几何学和三维重建任务非常重要。 -
图像和视频的 I/O:
OpenCV 提供了用于读取和写入图像和视频的函数,支持多种格式。 -
实时计算:
OpenCV 能够处理实时视频流,因此适用于需要实时处理的应用,如实时物体检测和跟踪。 -
跨平台支持:
OpenCV 支持 Windows、Linux、macOS 等多个平台,使得它成为一个跨平台的计算机视觉库。 -
开源和活跃的社区:
OpenCV 是一个开源项目,拥有庞大的用户和开发者社区。它经常更新和改进,且有丰富的文档和教程。
要使用 OpenCV,你需要安装 OpenCV 库并使用相应的编程语言(如 C++、Python)来调用其函数。可以根据你的需求选择相应的版本和安装方法。
安装 编写 编译 运行
在 OpenCV 中,人脸识别功能由 cv::CascadeClassifier
类来实现,通常使用 Haar 特征分类器来进行人脸检测。以下是使用 OpenCV 进行简单人脸识别的基本步骤:
-
安装 OpenCV:
如果你还没有安装 OpenCV,可以使用以下命令在 Ubuntu 上进行安装:sudo apt-get install libopencv-dev
在其他平台上,你可以根据 OpenCV 的官方文档进行安装:OpenCV Installation Guide
-
编写人脸识别代码:
创建一个 C++ 或 Python 文件,并使用 OpenCV 的CascadeClassifier
类加载人脸识别器模型。以下是一个简单的 Python 示例:import cv2 # 加载人脸识别器模型 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # 读取输入图像 img = cv2.imread('path_to_your_image.jpg') # 将图像转换为灰度 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 在图像上检测人脸 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5) # 在检测到的人脸周围绘制矩形 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) # 显示结果图像 cv2.imshow('Face Recognition', img) cv2.waitKey(0) cv2.destroyAllWindows()
请注意,此示例假定你已经有一张图像(
path_to_your_image.jpg
)用于人脸识别。 -
运行代码:
保存上述代码到一个文件(例如,face_recognition.py
)并在终端中运行:python face_recognition.py
或者如果是 C++ 代码,需要先编译:
g++ -o face_recognition face_recognition.cpp `pkg-config --cflags --libs opencv` ./face_recognition
这将加载人脸识别器模型,并在图像上检测和标记人脸。
请记得替换示例中的图像路径为你实际使用的图像路径。此外,OpenCV 还提供其他人脸识别的方法,例如基于深度学习的方法,你可以根据项目的需要进行更进一步的研究。
三、香橙派USB摄像头测试
(1) 首先将 USB 摄像头插入到 Orange Pi 开发板的 USB 接口中
(2) 然后通过 lsmod
命令可以看到内核自动加载了下面的模块
(3) 通过 v4l2-ctl
命令可以看到 USB 摄像头的设备节点信息为 /dev/video0
orangepi@orangepi:~$ sudo apt update
orangepi@orangepi:~$ sudo apt install -y v4l-utils
orangepi@orangepi:~$ v4l2-ctl --list-devices
注意: v4l2 中的 l 是小写字母 l ,不是数字 1 。
另外 video 的序号不一定都是 video0 ,请以实际看到的为准。
(4) 使用 mjpg-streamer 测试 USB 摄像头
a. 下载 mjpg-streamer
a) Github 的下载地址:
git clone https://github.com/jacksonliam/mjpg-streamer
b) Gitee 的镜像下载地址为:
git clone https://gitee.com/leeboby/mjpg-streamer
b. 安装依赖的软件包
a) Ubuntu 系统
orangepi@orangepi:~$ sudo apt-get install -y cmake libjpeg8-dev
b) Debian 系统
orangepi@orangepi:~$ sudo apt-get install -y cmake libjpeg62-turbo-dev
c. 编译安装 mjpg-streamer
orangepi@orangepi:~$ cd mjpg-streamer/mjpg-streamer-experimental
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ make -j4
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ sudo make install
d. 然后输入下面的命令启动 mjpg_streamer
注意, video 的序号不一定都是 video0 ,请以实际看到的为准。
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$ export LD_LIBRARY_PATH=.
orangepi@orangepi:~/mjpg-streamer/mjpg-streamer-experimental$sudo ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -u -f 30" -o "./output_http.so -w ./www"
vi start.sh
e. 然后在和开发板同一局域网的 Ubuntu PC 或者 Windows PC 或者手机的浏览器中输入【开发板的 IP 地址 :8080 】就能看到摄像头输出的视频了
f. 推荐使用 mjpg-streamer 来测试 USB 摄像头,比 motion 流畅很多,使用 mjpg-streamer 感觉不到任何卡顿
四、face_recognition 人脸识别库的安装和测试方法
注意,此小节的内容都是在 桌面版本 的 Linux 系统中测试的,所以请确保开发 板使用的系统为桌面版本的系统。
另外下面的安装测试都是在 orangepi 用户下进行的,请保持环境一致。
face_recognition 源码仓库的地址为:
https://github.com/ageitgey/face_recognition
face_recognition 中文版本的说明文档为:
https://github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md
使用脚本自动安装 face_recognition 的方法
(1) 首先在桌面中打开一个终端,然后下载 face_recognition_install.sh
orangepi@orangepi:~/Desktop$ wget https://gitee.com/leeboby/face_recognition_install/raw/master/face_recognition_install.sh
(2) 然后执行下面的命令开始安装 face_recognition
orangepi@orangepi:~/Desktop$ bash face_recognition_install.sh
(3) face_recognition 安装完后会自动下载 face_recognition 的源码,然后自动运行face_recognition 中的一些示例,如果最后能看到桌面上弹出了下面的这些图片就说明 face_recognition 安装测试成功了
手动安装 face_recognition 的方法参考用户手册
五、face_recognition 的测试方法
注意,下面的操作都是在桌面中演示的,所以首先请连接好 HDMI 显示器,或者使用 NoMachine/VNC 远程登录 Linux 桌面来测试。
(1) 在 face_recognition 的源码中有一些示例代码,我们可以直接用来测试,face_recognition 源码的下载地址如下所示:
a. GitHub 官方的下载地址
orangepi@orangepi:~$ git clone https://github.com/ageitgey/face_recognition.git
b. Gitee 镜像下载地址
orangepi@orangepi:~$ git clone https://gitee.com/leeboby/face_recognition.git
(2) face_recognition 示例代码的路径如下所示
face_recognition/examples
(3) face_recognition 的中文说明文档链接如下所示,使用 face_recognition 前请仔细阅读下
https://github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md
(4) find_faces_in_picture.py 用来在图片中定位人脸的位置,测试步骤如下所示
a. 在桌面中打开一个终端,然后进入 face_recognition/examples 目录,再执行下面的命令
orangepi@orangepi:~$ cd face_recognition/examples
orangepi@orangepi:~/face_recognition/examples$ python3 find_faces_in_picture.py
I found 1 face(s) in this photograph.
A face is located at pixel location Top: 241, Left: 419, Bottom: 562, Right: 740
b. 等待一段时间会弹出下面的图片,这就是在测试图片中定位到的人脸
(5) find_facial_features_in_picture.py 用来识别单张图片中人脸的关键点,测试步骤如下所示
a. 在桌面中打开一个终端,然后进入 face_recognition/examples 目录,再执行下面的命令
orangepi@orangepi:~$ cd face_recognition/examples
orangepi@orangepi:~/face_recognition/examples$ python3 find_facial_features_in_picture.py
b. 等待一段时间会弹出下面的图片,可以看到将人脸轮廓都标注出来了
(6) identify_and_draw_boxes_on_faces.py 用来识别人脸并使用方框标注,测试步骤如下所示
a. 在桌面中打开一个终端,然后进入 face_recognition/examples 目录,再执行下面的命令
orangepi@orangepi:~$ cd face_recognition/examples
orangepi@orangepi:~/face_recognition/examples$ python3 identify_and_draw_boxes_on_faces.py
b. 等待一段时间会弹出下面的图片,可以看到将图片中的人脸都使用方框标注出来了,并且正确显示了人物的名字
(7) face_distance.py 用来在不同精度上比较两个人脸是否属于一个人,首先打开一个终端,然后进入 face_recognition/examples 目录,再执行下面的命令就可以看到测试的输出结果
orangepi@orangepi:~$ cd face_recognition/examples
orangepi@orangepi:~/face_recognition/examples$ python3 face_distance.py
The test image has a distance of 0.35 from known image #0
- With a normal cutoff of 0.6, would the test image match the known image? True
- With a very strict cutoff of 0.5, would the test image match the known image? True
The test image has a distance of 0.82 from known image #1
- With a normal cutoff of 0.6, would the test image match the known image? False
- With a very strict cutoff of 0.5, would the test image match the known image?
False
(8) recognize_faces_in_pictures.py 用来识别未知图片中的人脸是谁。首先打开一个终端,然后进入 face_recognition/examples 目录,再执行下面的命令,等待一端时间后就能看到测试结果
orangepi@orangepi:~$ cd face_recognition/examples
orangepi@orangepi:~/face_recognition/examples$ python3 recognize_faces_in_pictures.py
Is the unknown face a picture of Biden? False
Is the unknown face a picture of Obama? True
Is the unknown face a new person that we've never
(9) facerec_from_webcam_faster.py 用来识别 USB 摄像头中的人脸,测试步骤如下所示:
a. 首先请将 USB 摄像头插入开发板的 USB 接口中,然后通过 v4l2-ctl ( 注意 v4l2 中的 l 是小写字母 l ,不是数字 1 )命令查看下 USB 摄像头的设备节点的序号
b. 然后在桌面中打开一个终端,进入 face_recognition/examples 目录后,首先修改下 facerec_from_webcam_faster.py 中使用的摄像头的设备序号。比如上面通过 v4l2-ctl --list-devices 命令查看到 USB 摄像头为 /dev/video1 ,那就修改 cv2.VideoCapture(0) 中的 0 为 1
c. 然后执行下面的命令运行 facerec_from_webcam_faster.py
orangepi@orangepi:~/face_recognition/examples$ python3 facerec_from_webcam_faster.py
d. 等待一段时间会弹出摄像头的显示画面
e. 此时可以将摄像头对准自己,当摄像头检测到人脸时,会将检测到的人脸使用方框框起来。注意,检测人脸时,摄像头显示的画面会比较卡顿,请不要移动过快
f. 还可以打开一张奥巴马的图片,然后使用摄像头对准打开的图片,可以看到不仅能将人脸标注出来,还能正确显示检测到的人脸的名字。注意,检测人脸时,摄像头显示的画面会比较卡顿,请不要移动过快
(10) web_service_example.py 是一个非常简单的使用 Web 服务上传图片运行人脸识别的案例,后端服务器会识别这张图片是不是奥巴马,并把识别结果以 json 键值对输出,测试步骤如下所示:
a. 在桌面中打开一个终端,然后进入 face_recognition/examples 目录,再执行下面的命令( 如果是使用脚本自动安装的 face_recognition ,那么就不需要 安装 flask 了 )
orangepi@orangepi:~$ python3 -m pip install flask
orangepi@orangepi:~$ cd face_recognition/examples
root@orangepi:~/face_recognition/examples$ python3 web_service_example.py
* Serving Flask app 'web_service_example' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on
* Running on all addresses (0.0.0.0)
WARNING: This is a development server. Do not use it in a production deployment. * Running on http://127.0.0.1:5001
* Running on http://192.168.1.79:5001 (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 500-161-390
b. 然后运行下面的命令就可以返回图片识别的结果(注意,下面的命令执行路径为 face_recognition/examples )
orangepi@orangepi:~/face_recognition/examples$ curl -XPOST -F "file=@obama2.jpg" http://127.0.0.1:5001
{
"face_found_in_image": true,
"is_picture_of_obama": true
}
c. 我们也可以将 face_recognition/examples/obama2.jpg 这张图片拷贝到其他的 Linux 电脑中,当然也可以自己准备一张名为 obama2.jpg 的图片,然后在 Linux 电脑中可以使用下面的命令远程通过开发板运行的服务来识别人脸(注意命令中的 IP 地址需要替换为开发板的 IP 地址, file 后的文件名需 要替换为想要测试的图片的名字 )
test@test:~$ curl -XPOST -F "file=@obama2.jpg" http://192.168.1.79:5001
{
"face_found_in_image": true,
"is_picture_of_obama": true
}
d. 使用浏览器测试的方法如下所示:
(a) 首先打开浏览器,然后在浏览器的地址栏输入开发板的 IP 地址 :5001 ,然后就能看到下面的页面
(b) 然后将 obama2.jpg 复制到桌面
orangepi@orangepi:~/face_recognition/examples$ cp obama2.jpg /home/orangepi/Desktop/
( c) 然后在浏览器中选择刚才复制的图片
(d) 然后点击 Upload 上传刚才选择的图片进行人脸识别
(e) 等待一段时间后就会显示检测的结果
(11) face_detection 命令测试示例
详情请看用户手册