산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

PiCamera를 사용한 AI 숫자 인식

Raspberry Pi, Pi로 숫자 인식 카메라, OpenCV 및 TensorFlow.

스토리

이 프로젝트에서 우리는 숫자를 전사하기 위해 심층 합성곱 신경망을 훈련할 것입니다. 그런 다음 학습 단계의 데이터를 사용하여 Pi 카메라가 숫자를 읽고 인식할 수 있도록 합니다. AI 파이프라인은 이미지 조작을 위해 Scikit 및 OpenCV 3.3을 사용하고 딥 러닝 부분을 위한 백엔드로 Tensorflow를 사용하는 Keras를 사용하여 구현됩니다.


이 작업을 쉽게 유지하기 위해 기능 현지화 단계가 수행되지 않습니다. 이미지를 카메라 렌즈 앞으로 밀어야 이미지가 보이는 유일한 특징이 됩니다.

MNIST 데이터세트가 사용됩니다. 60,000개의 훈련 예제와 10,000개의 테스트 예제와 28×28픽셀 흑백 이미지 형식의 손글씨 숫자 0-9로 구성되어 있습니다. 기본적으로 카메라에서 획득한 모든 이미지를 다음과 같은 이미지로 변환합니다.

주 네트워크 토폴로지는 아래 이미지로 설명할 수 있습니다.

마지막 레이어는 10자리 숫자를 나타내는 10개 범주에 매핑되는 완전히 연결된 레이어입니다.

두 가지 작업을 수행할 것입니다. 먼저 숫자를 인식하는 네트워크를 훈련합니다. 그런 다음 Raspberry Pi 카메라에서 가져온 라이브 카메라 피드 숫자를 인식하기 위해 훈련한 네트워크의 가중치를 사용했습니다.

라즈베리 파이 카메라를 잡기 위해 세 번째 손을 사용했습니다. 기계적 설정은 아래 그림으로 설명할 수 있습니다.

이 모든 작업을 시작하기 전에 먼저 필요한 모든 것을 설치하겠습니다. Python 가상 환경을 사용하여 프로그램을 설정했습니다. 따라서 아래 나열된 모든 프로그램이 있다고 가정하면 발급할 수 있습니다.

소스 ~/.profile 작업 cvpython PiCameraApp.py --picamera 1

자세한 내용을 살펴보겠습니다. 먼저 여러 프로그램을 설치해 보겠습니다.

Tensorflow 설치

pip 설치 텐서플로

케라스 설치

pip install 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에 설치한 후에는 약간의 교육을 수행해야 합니다. 느린 성능에 익숙해지고 RPI에서 그렇게 하기로 결정한 영웅이 아닌 한 GPU가 탑재된 노트북을 선호하는 노트북에서 네트워크를 훈련해야 합니다.

네트워크 교육

네트워크를 훈련하려면 다음을 실행하여 랩톱에서 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를 그리려면 많은 잉크를 사용해야 했습니다.

때때로 네트워크는 다른 숫자에 대해 극도로 낮은 확률을 인쇄합니다. 따라서 7일 가능성은 0.0001%입니다.

무역의 도구.

프로그램 설명

프로그램은 't' 키를 누르면 카메라에서 스냅샷을 찍고 DNN으로 전달하기 전에 이미지에 여러 변환 단계를 적용합니다.

먼저 염두에 두어야 할 것은 컬러 이미지가 부동 소수점 숫자의 큰 배열로 획득된다는 것입니다. 먼저 이미지가 RGB 형식에서 그레이 스케일 이미지로 변환되므로 효과적으로 두 개의 채널을 버리고 있습니다.

다음 단계는 이미지의 부동 소수점 형식을 0-255 범위의 8비트 숫자로 변환하는 것입니다.

다음으로 OpenCV를 사용하여 임계값을 지정합니다. Otsu 방법은 숫자의 특징이 분명하도록 이미지를 자동으로 임계값으로 지정하는 데 사용됩니다. 다음 단계는 이미지의 크기를 28×28 픽셀 형식으로 조정하는 것입니다. 이것은 MNIST DNN에서 허용하는 것과 동일한 형식입니다.

스케일링을 수행하기 위해 scikit 이미지, open-cv 또는 Keras를 사용할 수 있습니다.

이미지 크기가 다시 조정된 후 MNIST는 숫자가 흰색 배경의 검은색 선이 아닌 검은색 배경에 있을 것으로 예상하므로 다음 단계는 색상을 반전시키는 것입니다.

후처리 후 이미지는 관찰된 숫자를 예측하는 DNN으로 전송됩니다.

출력 배열은 관찰된 이미지가 해당 숫자일 확률을 나타냅니다. 따라서 위치 2의 1은 1이므로 100% 확실성을 나타냅니다. 위치 1은 0을 위해 예약되어 있다는 점에 유의하십시오.

알고리즘 단계

1. 이미지 읽기

첫 번째 단계는 분명히 카메라 앞에 이미지를 배치하는 것입니다. CNN(Convolutional Neural Network)이 특정 크기의 이미지를 기대하기 때문에 나중에 크기가 조정됩니다.

2. 그레이 스케일로 변환

획득한 이미지는 scipy 함수 호출을 사용하여 회색조로 변환됩니다. 우연히도 이미지 조작에는 opencv만 사용할 수 있지만 모든 함수 이름을 기억해야 합니다. 또한 또 다른 요점은 특정 기능과 관련하여 scipy와 open-cv 사이에 매우 미묘한 차이가 있다는 것입니다.

3. 이미지 범위 확장

여기서 이미지는 부동 소수점 형식에서 uint8 범위 [0, 255]로 변환됩니다.

4. 임계값

멋진 흑백 이미지를 얻기 위해 임계값은 Otsu 방법을 통해 수행됩니다. 수동으로 임계값을 지정하면 값을 하나씩 입력해야 하기 때문에 이것은 마법의 소스 단계입니다.

5. 이미지 크기 조정

이미지 크기가 28x28픽셀 배열로 조정됩니다. 그런 다음 크기(28×28)

의 선형 배열로 병합됩니다.

6. 이미지 반전

MNIST DNN은 검정색 배경에 흰색으로 그려진 28×28 픽셀의 이미지를 허용합니다. 따라서 이미지를 반전시켜야 합니다.

7. 훈련된 신경망에 피드

마지막 단계입니다. 여기서 우리는 심층 신경망 가중치를 로드하고 이미지를 네트워크에 공급합니다. 예측하는 데 2~3초가 걸립니다.

8. 답변 인쇄

마지막으로 0-9의 모든 숫자를 표시하는 10개의 클래스가 있는 출력 배열로 끝납니다. 배열의 위치는 네트워크에서 추론할 확률을 나타냅니다. 이것을 인간의 말로 번역한다는 것은 가장 높은 확률로 포지션을 선택하는 것을 의미합니다.

기본 설정은 의료 기기처럼 보입니다.

핀!

이상입니다. 숫자를 인식할 수 있는 신경망을 구현하는 방법을 보여주었습니다.

항상 GitHub에 업로드된 코드.

출처: PiCamera를 통한 AI 숫자 인식


제조공정

  1. Acceed:4개의 SFP 포트가 있는 12포트 기가비트 스위치
  2. AAEON은 Intel과 협력하여 강력한 네트워크 솔루션을 제공합니다
  3. 2세대 Intel Xeon으로 네트워크 어플라이언스를 업그레이드하기 위한 Lanner
  4. DS18B20으로 온도 읽기 | 라즈베리 파이 2
  5. RASPBERRY PI로 온도 측정
  6. Raspberry Pi로 온도 모니터링
  7. Walabot과 함께하는 자세 교정기
  8. TJBot 시작하기
  9. Raspberry Pi로 세그웨이 구축
  10. Windows IoT 기반 GoPiGo v2