亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 PiCamera 进行 AI 数字识别

使用 Raspberry Pi、Pi 识别数字相机、OpenCV 和 TensorFlow。

故事

在这个项目中,我们将训练一个深度卷积神经网络来转录数字。然后我们将使用学习阶段的数据让 Pi Camera 读取和识别数字。人工智能管道将使用 Scikit 和 OpenCV 3.3 实现图像处理,以及使用 Tensorflow 作为深度学习部分后端的 Keras。


为了保持简单,没有完成特征本地化阶段。您必须将图像推到相机镜头前,这样才能看到它的唯一特征。

将使用 MNIST 数据集。它由格式化为 28×28 像素单色图像的手写数字 0-9 的 60,000 个训练示例和 10,000 个测试示例组成。基本上,我们将从相机中获取的所有图像转换为如下所示的图像:

主要网络拓扑可以用下图描述:

最后一层是全连接层,映射到代表10位数字的10个类别。

我们要做两件事。首先,我们训练一个识别数字的网络。然后我们使用我们训练的网络的权重来识别从 Raspberry Pi 摄像头拍摄的实时摄像头输入数字。

我用第三只手拿着 Raspberry Pi 摄像头,因为那是我的全部。机械设置可以用下图描述:

在我们开始所有这些之前,让我们先安装我们需要的一切。我使用 Python 虚拟环境来设置程序。因此,假设您拥有下面列出的所有程序,您可以发出:

source ~/.profile workon cvpython PiCameraApp.py --picamera 1

让我们了解细节。首先让我们安装一堆程序。

安装 TensorFlow

pip 安装张量流

安装 Keras

pip 安装 keras 

安装 Open-CV 3.3

如果您需要所有优化,安装 OpenCV 有点复杂。这意味着我们必须从头开始编译它,因为来自 pip 包管理器的那个没有所有的优化。

我找到的最好的教程来自这个链接:

https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/ 

最后安装带有Numpy优化的picamera。

pip install "picamera[array]" 

现在在我们将所有软件堆栈安装在 RPI 上之后,我们必须进行一些培训。网络应该在配备 GPU 的笔记本电脑上进行训练,除非您是一位对冰川缓慢性能感到满意的英雄,并且您决定在 RPI 上进行。

训练网络

为了训练网络,在笔记本电脑上运行 python 文件:

python Train_MNIST.py

这假设您的笔记本电脑上安装了 Cuda(如果使用 gpu 版本)、Tensorflow、Keras 和 matplotlib。

此文件中的程序使用 Keras 定义深度神经网络模型,对其进行编译,并在完成训练和验证阶段后保存网络权重。

最后程序将网络的权重保存为a.h5文件。这是我们将加载到 RPI 上运行的识别脚本上以识别实时数字图像的具有网络权重的文件。

使用 scp 或 WinSCP 将权重文件复制到您的 RPI。

如果您有 NVIDIA GPU,则训练将需要几分钟时间,具体取决于您显卡的计算能力。但是,要利用 GPU,您必须安装 GPU 版本的 Tensorflow 以及来自 NVIDIA 网站的 CUDA 可执行文件。否则,如果您仅使用 CPU,则可能需要更长的时间。

识别数字的实时图像

我最终测试了手写数字和印刷数字。预测的准确性主要取决于灯光和图像角度 以及你的写作到底有多模棱两可(读起来很糟糕)。启动应用后按 t 读取数字和 q 退出。

识别数字 4。我不得不用很多墨水来画那个 4。

有时网络会打印出其他数字的极低概率。所以有 0.0001% 的几率可能是 7。

贸易工具。

程序说明

该程序在按下“t”键时从相机拍摄快照,并在将其转发到 DNN 之前对图像应用许多转换步骤。

首先需要记住的是,彩色图像是作为浮点数的大数组获取的 首先,图像从 RGB 格式转换为灰度图像,因此我们可以有效地抛出两个频道。

下一步就是将图片的浮点格式转换为一个范围为0-255的8位数字。

接下来我们使用 OpenCV,进行阈值处理。 Otsu方法用于自动对图像进行阈值处理,使数字特征明显。下一步是将图像大小调整为 28×28 像素的格式。这与 MNIST DNN 接受的格式相同。

可以使用 scikit image、open-cv 或 Keras 进行重新缩放。

图像重新缩放后,下一步是反转颜色,因为 MNIST 预计数字将位于黑色背景中,而不是白色背景上的黑色线条。

经过后处理的图像被发送到 DNN,它对观察到的数字进行预测。

输出数组表示观察到的图像是那个数字的概率。所以位置 2 中的 1 表示 100% 的确定性,因为它是 1。请记住,位置 1 是为 0 保留的。

算法步骤

1.阅读图片

第一步显然是在相机前放一张图片。由于 CNN(卷积神经网络)需要特定大小的图像,因此稍后将对其进行缩放。

2.转换为灰度

然后使用 scipy 函数调用将获取的图像转换为灰度。巧合的是,您只能使用 opencv 进行图像处理,但您必须记住所有函数名称。还有一点,scipy 和 open-cv 在某些功能上有一些非常细微的区别。

3. 缩放图像范围

这里图片从浮点格式转换为uint8范围[0, 255]

4. 阈值

为了获得漂亮的黑白图像,阈值是通过 Otsu 方法完成的。这是神奇的酱汁步骤,因为手动进行阈值将一个一个地输入值。

5. 调整图片大小

图像被调整为 28 x 28 像素阵列。然后将其展平为大小为 (28×28) 的线性数组

6. 反转图像

MNIST DNN 接受 28×28 像素的图像,在黑色背景上绘制为白色。所以我们必须反转图像。

7. 输入训练好的神经网络

这是最后一步。在这里,我们加载深度神经网络权重并将图像提供给网络。做出预测需要 2-3 秒。

8. 打印答案

最后我们得到一个包含 10 个类的输出数组,显示 0-9 的所有数字。数组的位置表示网络进行推理的概率。将其翻译成人类语言意味着选择概率最高的位置。

主要设置看起来像一个医疗设备。

鳍!

就是这样。这展示了如何实现一个可以识别数字的神经网络。

代码一如既往地上传到 GitHub。

来源: 使用 PiCamera 进行 AI 数字识别


制造工艺

  1. 加入:具有 4 个 SFP 端口的 12 端口千兆交换机
  2. 研扬科技与英特尔合作提供强大的网络解决方案
  3. Lanner 使用第二代英特尔至强升级网络设备
  4. 使用 DS18B20 读取温度 |树莓派 2
  5. 使用 RASPBERRY PI 测量温度
  6. 使用 Raspberry Pi 监测温度
  7. Walabot 的姿势伙伴
  8. TJBot 入门
  9. 使用 Raspberry Pi 构建赛格威
  10. GoPiGo v2 与 Windows IoT
  11. 利用物联网网络解决方案抗击城市地区的洪水
  12. WND 与 Sigfox 合作,为英国提供物联网网络