[목차]


필자는 인공지능 개발에 활용이 가능한 Edge TPU 가속모듈인 USB 타입 구글 코랄(Coral) 장치를 구입하고 코랄 공식홈페이에 제시된 예제인 분류모델을 실행해보았습니다. 이미지 파일을 입력받아 분류하는것이라 카메라의 실시간 영상을 입력받아 처리할수 있는 방법이 궁금하였습니다. 검색을 하다 보니 라즈베리파이 3와 구글 코랄 USB 장치를 활용하여 Mobilenet-SSD v2로 카메라의 영상에서 사물을 디텍션하고 분류하는 내용을 찿아볼수 있어 실행해보기로 하였습니다.



■ 테스트 장치 환경

영상을 입력받아 발견(Detection)하고 이를 분류(Classification)하기 위해서는 이전 포스트 [2. 구글 코랄(Coral) 환경설정 및 예제 분류 모델 실행해보기.] 에서 활용했던 장치인 Raspberry3 b+USB 구글 코랄(Coral) 가속기외에 카메라 장치가 추가로 필요했습니다. 필자의 라즈베리파이는 케이스에 조립한 상태라 이번 포스트는 USB 웹캠을 사용하였습니다. 


필자가 사용한 장치인 라즈베리파이3 b+, Google Coral Accelerator, Logitech C270 웹캠입니다.

장치를 연결후 USB 장치가 잘 인식되었는지 확인해보기위해 lsusb 명령어를 입력해보았습니다.

> lsusb
Bus xxx Device xxx: ID xxxx:xxxx Google Inc.
Bus xxx Device xxx: ID xxxx:xxxx Logitech, Inc. Webcam C270

구글 코랄(Coral) 딥러닝 추론 가속기 장치와 로지텍(Logitech) C270 웹캠 장치가 정상적으로 인식된것을 확인할수 있었습니다.



■ 실행코드 및 Open CV 설치

필자가 참조한 일본어 사이트의 포스트는 파이선 코드를 명세하고 있었습니다. 해당코드를 직접 편집기에 작성하여 py 파일을 생성하였습니다. 모델과 라벨파일은 예제 분류모델을 실행할때 다운받은것을 활하면되었기 때문에 파이썬 실행 파일만 생성하면 실행이 가능하였습니다. 파일의 생성 순서는 다음과 같습니다.

> cd /home/pi/python-tflite-source/edgetpu/demo
> nano MobileNet-SSD-TPU-async.py

i. 위의 명령어를 입력하여 nano 편집기를 실행시킵니다.

ii. https://qiita.com/PINTO/items/dd6ba67643bdd3a0e595 사이트에 접속하여 4-2 항목의 MobileNet-SSD-TPU-async.py 코드를 복사하여 붙여넣습니다.

iii. ctrl + o 키를 눌러 저장한후 ctrl + x 키를 눌러 편집기를 종료합니다..


실행해 보려고 하니 에러를 출력하는군요 MobileNet-SSD-TPU-async.py 파일의 코드를 확인해보니 import cv2 라인을 포함하고 있었습니다. 라즈베리안의 pythone3 에서 openCV를 사용하기위해 openCV를 빌드해보았으나 너무 오래걸리는 관계로 AI Robots KR 커뮤니티 카카오톡 오픈채팅방의 Gygy님께서 알려주신 링크인 [라즈베리파이 OpenCV 설치(빌드 없이 설치파일로)] 포스트의 내용을 참고 하여 OpenCV를 설치하였습니다.



■ 실행해보기 및 결과

OpenCV 설치가 완료 되었으니 실행을 해보기로 했습니다. 파이썬 코드만 작성하였기 때문에 모델과 라벨 파일을 지정해야 합니다. 참고한 일본어사이트에는 실행 명령어를 제시하고 있지 않는군요 일본어 사이트 포스트 제목에 MS-COCO라는 문구가 존재하네요 Edge TPU런타임의 디렉토리를 살펴보니 지정할수 있는 모델과 라벨 파일이 존재하고 있어 이것을 사용하기로 하고 명령어를 입력하였습니다.

> cd /home/pi/python-tflite-source/edgetpu/
> python3 demo/MobileNet-SSD-TPU-async.py --model test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite --label test_data/coco_labels.txt


위의 명령를 실행시켜보니 C270 카메라로 받은 영상이 정상적으로 디텍팅 되고 분류가 수행되는군요 (필자는 98% 사람으로 인식되는군요 그럼.... 나머지 2%는.....?????? ^^ ) 포스트의 사진에 표시된 플레이백 프레임과 디텍션 프레임은 참고한 사이트의 수치보다 낮은 수치가 나오고 있지만 라즈베리파이가 장시간 opencv 를 빌드하느라 발열로 인하여 성능이 떨어진 상태에서 실행한것을 촬영한것이라 낮게 나온것 같네요 다음날 다시 실행해보니 꽤 올라간 프레임 수치가 나오는것을 확인할수 있었습니다.


- 2019.04.15 달의날에 프미케 -

[목차]

 
■ 테스트 환경

몇일전에 구입한 머신러닝 개발 사용할수 있는 가속기 모듈인 구글 코랄(Coral)이 생각보다 빨리 도착해서 공식홈페이지에 있는 Doc 메뉴를 읽어보며 예제를 실행해보기로했습니다.  내용중에 USB타입 코랄 엑설러레이터의 경우 X86_64 환경 혹은 armv8 아키텍쳐 환경에서 예제를 실행할수 있다는 내용을 볼수 있었습니다.

아쉽게도 필자가 보유하고 있는 SBC(Single Board Compuer)들은 모두 armv7아키텍쳐의 프로세서가 탑재된것이라 가지고 있는SBC는 사용을 할수가 없었습니다. 하지만 리눅스 박스로 사용하고있는 저전력 컴퓨터는 구형이기는 하지만 Atom330과 E350프로세서를 탑재하고 있기때문에 X86_64환경을 충족하고 있었습니다. 일단 예제를 실행 시켜보기위해 Edge TPU 런타임 설치 및  예제 실행 명령어를 입력해보니 Illegal instruction 에러가 출력되고 (E350의 데비안에서는 Illegal instruction (core dumped)라고 출력되는군요) 실행이 되지 않았습니다. 

검색을해보니  텐서플로우 1.6 이상버전 부터는 CPU의 AVX명렁어가 사용되도록 빌드되어 CPU가 AVX를 지원하지 않을경우 Illegal instruction (core dumped) 에러를 띄운다는 내용을 찾을수 있었습니다. 정확히는 모르지만 edge TPU 런타임의 경우도 같은이유가 아닐까라는 추측하고 하고 명령어를 입력해 확인해보았습니다.

> grep avx /proc/cpuinfo 

확인을 위해 위의 명령를 입력해보니 atom330, E350 둘다 아무내용이도 출력되지 않는 것으로 보아 필자의 리눅스박스는 avx 명령어는 지원하지 않는 프로세서를 사용하고 있는 것이네요. 불필요한 삽질을 피하기 위해 armv8 환경이 지원되는 프로세서가 탑재된 라즈베리파이3 b+ 모델을 구입하였습니다.


■ Edge TPU 런타임 및 Python 라이브러리 설치

> wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
> tar xzf edgetpu_api.tar.gz
> cd python-tflite-source
> bash ./install.sh

Google Coral EdgeTPU 튜토리얼은 python 3.5버전 이상을 요구하고 있다고 합니다. 라즈베즈베리안의 파이썬3는 3.5버전이 이미 설치되어 있네요 다른 패키지를 설치할 필요 없이 예제 문서에 있는대로 설치 명령어를 입력하였습니다. 

라즈베리파이 b+에서는 특별한 경고나 오류 없이 잘설치가 되는것을 볼수 있었습니다. bash ./install.sh 를 입력하면 최대 동작 주파수를 사용할것이냐는 질의가 나오는데 최대 주파수의 동작의 경우 발열이 있다는 내용이 있어 일단은 N 을 선택하여 설치를 진행하였습니다. 

 예제 분류 모델 실행 

> cd edgetpu/
> python3 demo/classify_image.py --model  test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --label test_data/inat_bird_labels.txt --image test_data/parrot.jpg 

Get started with the USB Accelerator 튜토리얼에 나온대로 분류 모델 실행을 위해 문서에 명세된대로 위의 명령어를 입력해보았습니다. 

ERROR: Failed to retrieve TPU context
ERROR: Node number 0 (edgetpu-custom-op) failed to prepare 

에러가 출력되는군요 코랄 USB 가속기가 연결되지 않았다는 내용인데 설치하기전에 USB를 연결하고 설치 한것이 문제였나보네요 USB를 뽑았다 다시 연결하여 lsub명령어로 확인해보았더니 설치 스크립트 실행전에 는  Global Unichip Corp.  인식됬던 장치가 Google Inc. 장치로 변경된것을 확인하고 실행 명령어를 다시 입력해 보았습니다.

-------------------------------
Ara macao (Scarlet Macaw)

Score :  0.613281
-------------------------------
Platycercus elegans (Crimson Rosella)
Score :  0.152344

정상적으로 실행이 잘되는군요. Illegal instruction 에러로 인해 조금 당황하기도 했지만 공식홈의 시작하기 튜토리얼 따라해보며 구글 코랄(Coral) 인공지능 가속기를 사용한 분류 모델이 잘 동작하는 것을 확인할수 있었습니다.


- 2019.04.08 달의날에 프미케 -

Create Date :2015/01/15,  Modified Date : 2015/01/17,  Revision : 3.


gstreamer로 해보는 라즈베리파이 카메라 테스트.


*사용 OS : raspbian(debian wheezy) 2014-12-24 / windows7 64

*사용 프로그램 : gstreamer1.0



얼마전 라즈베리파이 카메라 모듈을(pi-cam) 구입 하였습니다. 테스트를 해보기위해 인터넷을 검색해 VLC를 사용한 스트리밍, mjpg-stream을 사용한 웹스트리밍을 수행해 보았습니다. 두가지 자료 모두 정상적으로 카메라 영상을 볼수 있었지만 지연시간이 길어서 (상황에 따라 약3~10초 정도 되었었습니다.) 만족스러운 테스트 결과를 얻을수 없었습니다.


그러던중 gstreamer을 활용한 스트리밍은 지연시간이 상당히 짧다는 내용(약 0.2초) 을 검색할수 있었습니다. 테스트를 위해 내용을 수행보려 했지만 검색된 내용은 리눅스에서 영상을 출력하고 있었습니다. 필자는 윈도우에영상출력 테스를 하려고 하였기 때문에 몇가지 내용의 검색을 더 수행하였습니다.

 

자료를 검색해 종합하여 정상적인 실행및 테스트를 할수 있었습니다. 또한 매우 짧은 지연시간을 확인할수 있었습니다. 아래 내용은 필자가 수행했던 설치 방법및 실행 방법을  정리해보았습니다.



1. 라즈베리파이 카메라 설정.


$ sudo raspi-config

* 5 Enable Camera 항목 Enter키 누른후 Enable 선택후 Enter키 입력.

* <Finish> 선택하여 Enter키 누른후 <Yes>에 Enter키눌러 재부팅.



2. 라즈베리파이 gstreamer 설치/실행.


$ sudo apt-get update

$ sudo apt-get install gstreamer1.0

(* raspbian 2014-12-14 버전에서는 별도의 저장소 추가 없이 설치가 가능하였습니다.)

$raspivid -t 0 -w 800 -h 600 -fps 30 -hf -vf -b 50000000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=[타켓 컴퓨터 IP] port=5000



3. 윈도우 gstreamer 설치/실행.


아래링크에서 사용하고있는 윈도우 시스템에 맞는 패키지를 다운 받은후 설치합니다.(complete를 선택하여  설치합니다. Typical 선택시 WARNING: erroneous pipeline: no element "avdec_h264" 에러가 발생할수 있습니다.)

32비트 : http://gstreamer.freedesktop.org/data/pkg/windows/1.4.5/gstreamer-1.0-x86-1.4.5.msi

64비트 : http://gstreamer.freedesktop.org/data/pkg/windows/1.4.5/gstreamer-1.0-x86_64-1.4.5.msi


* 시작을 눌러 cmd를 입력후 Enter키를 눌러 cmd창을 열어줍니다.

C:\> cd gstreamer

C:\gstreamer> cd 1.0

C:\gstreamer\1.0> cd x86_64 [32비트일경우 cd x86]

C:\gstreamer\1.0\x86_64> cd bin

C:\gstreamer\1.0\x86_64\bin> gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false



* 기타사항


Issue 1> URL : http://pmice.tistory.com/292#comment10104514

윈도우 gstreamer1.0 1.4.5버전에서는 gdpdepay 파이프라인을 선언한 실행이 가능한것을 확인하였습니다. (낮은 버전 사용시 WARNING: erroneous pipeline: no element "gdpdepay" 에러로 인하여 실행을 할수 없었습니다.)


[ 명령어 예제 ]

라즈베리파이 : $ raspivid -t 0 -h 720 -w 1280 -fps 25 -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=[라즈베리파이IP] port=5000


윈도우 : C:\gstreamer\1.0\X86_64\bin> gst-launch-1.0 -v tcpclientsrc host=[라즈베리파이IP] port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false



* 참고URL


1)  http://robogoby.blogspot.kr/2014/01/raspi-camera-gstreamer-10-w-windows-7.html

2)  http://www.raspberrypi.org/forums/viewtopic.php?p=491075



- 2015.01.15 나무의날에 프미케 -


* 본 포스트의 원문은 프미케의 낙서장(http://pmice.tistory.com)에서 작성되었습니다.




'라즈베리파이' 카테고리의 다른 글

라즈베리파이.....  (0) 2014.08.18

예전에 Icbanq에서 라즈베리파이를 구입해서 그동안 책상위에 박스채로 잘 모셔두었습니다.

얼마전 지름신께서 강림하신 바람에 SG90 서보 모터를 여러개 구매해 버렸습니다. 실험할 제어 보드로 라즈베리파이를 사용하기로 했습니다.

라즈님을 소환해보니 서포트를 끼울수 있는곳이 두곳이었습니다. 서포트를 끼우고 세워보니 안세워 ​
집니다.


​​​"​세워보고 또세우고~ 세워보고 또세우고~세워보고 또세우고~ 세워보고 또세우고~세워보고 또세우고~ 세워보고 또세우고~세워보고 또세우고~ 세워보고 또세우고~세워보고 또세우고~ 세워보고 또세우고~"를 실행해보다가 정신건강을위해 그만하고 바닥판를 만들어보았습니다.


3mm MDF판재에 홀가공을 해준후에 바닥면은 미끄러지지 않도록 고무판를 잘라 붙였습니다. (홀가공은 요전번에 만든 미니자동드릴머신을 이용하려 하다가 설치가 귀찮아서 수동핸드드릴을 사용했습니다.)

바닥판에 만들어 결속해주었더니 안정적으로 놓여집니다. 이제 서보를 이용해서 무엇을 만들어야 할것인지 생각해 보아야 겠습니다.

* 본 포스트의 원문은 프미케의 낙서장(http://pmice.tistory.com)에서 작성되었습니다.


이전에 ICBANQ(http://www.icbanq.com) 에서 진행된 범용 임베디드보드인 마스보드 무상체험이벤트에 응모하여 선정이 되었었습니다.


저번 포스트에서는 '마스보드를 DIY cnc/3d프린터에 제어보드로 사용하면 어떨까?' 를 확인해보았습니다. 


이번에는 마스보드 무상체험단 이벤트 세번째 미션인 제품 사용 후기를  포스팅 해보도록하겠습니다.


마스보드를 처음 수령해서 개봉해 보았을때 모습은 위의 사진과 같았습니다. 일단 제어보드로 활용을 목적으로 해서 많은 확장 핀에 눈길이 가더군여 기본포트및 슬롯외에 꽤 많은  확장핀을 제공하고 있어 여러가가 기기를 연결 할 수 있어 보였습니다.

 

구분 

마스보드 A10

 큐비보드

 라즈베리 파이

 비글본 블랙

 CPU

Allwinner A10(1Ghz)

Allwinner A10(1Ghz)

 ARM1176JZF-S

(700Mhz)

 Sitara AM3359AZCZ100

(700Mhz)

 GPU

 Mail 400

Mail 400 

 VideoCore IV

 SGX530

 RAM

 1Gb

1Gb

 512 Mb

 512 Mb

 NAND

 4Gb

4Gb

 SD card slot

 2G & SD card slot

 VIDEO(OUT)

HDMI

HDMI

 HDMI, AV

 HDMI

 USB

3 + 1(USB OTG)

3 + 1(USB OTG)

 2

 2

 ETHERNET

 O

 O

 O

 AUDIO(IN)

 X

O

 O

 O

 AUDIO(OUT)

 O

O

 O

 O

 OS

Android 4.0ICS,

Linux,

Ubuntu,

Fedora

Android preinstalled,

Linux

Linux

Linux,

Android,

Windows

Embedded CE

 SIZE

 80*55(mm)

 100*60(mm)

 85.60*53.98(mm)

88.98*54.63(mm) 

 OTHER

SATA, microSD,

expansion 140pin

SATA, IR, micro SD,

Power Socket 4mm

macroSD,

Onboard 20pin

micro SD

* 자료참조 http://www.icbanq.com/shop/product_detail.asp?prod_code=P002297724&catg_code=100111


하드웨어 사양을 비교해보면 큐비 보드와 사양이 거의 같은것을 확인할수 있었습니다. 요즘 인기 있는 보드인 라즈베리파이 및 비글본 블랙과 비교해보면 마스보드와 큐비보드쪽이 하드워에 사양이 높아 보입니다.


보드의 크기가 손바닥 정도로 작은 크기라 여러곳에 적용이 가능 해보입니다. 사진은 마스보드 무상체험 이벤트 미션2를 진행하면서 필자의 DIY CNC의 컨트롤 패널에 설치 가능여부를 확인해 보기위해 크기를 가늠해봤습니다.



필자가 마스 보드를 임베디드 개발보드로 활용하고 있는 사진입니다. 확장핀에 헤더 소켓을 적용해 브레드 보드와 함께 사용할수 있도록 하였습니다. 점퍼로 사용한 선은 랜선 안에 들어있는 얇은 선을 활용 하였습니다.(위의 사진은 pc의 하이퍼 터미널을 사용하여 디버깅할수 있도록 마스보드와 usb2uart를 연결할수 있도록 구성한것 입니다.)


이번 마스보드 무상체험 미션을 진행하면서 범용 임베디드보드인 마스보드를 활용 해볼수 있는 기회가 되었습니다. 


미션을 진행하면 인터넷 검색을 통해 확인해본바로는 아직까지 마스보드보나 큐비보드 보다는 라즈베리 파이쪽이 유저 라이브러리 및 포팅된 어플수가가 많은것 같았습니다.(먼저 출시되었고 상당한 인기를 끌었던 제품이라 유저 그룹이 상당히 활발하더군요)


하지만 마스보드가격대비 높은 하드웨어 사양을 적용한 데다가 메인칩인 Allwinner A10 SoC를 적용한 범용 임베디드 보드가 여러종류출시 되어있어서  (마스보드, hackberry, 큐비보드등) 많은 유저 라이브러리및 안정화 사항등이 공유 된다는 점으로 봤을땐 점진적 으로 다양한 개발사항들을 진행할수 있을것으로 기대되는 제품 입니다.


끝까지 읽어 주셔서 감사합니다.


체험단 미션을 마치고 필자가 마스보드를 활용한 사항에 대한 포스팅은 필자가 운영하고 있는 블로그인 프미케의 낙서장(http://pmice.tistory.com)에 게시할 예정이오니 많은 관심 부탁드립니다.


- 2013.08.28 물의날에 프미케 -


* 본 포스트는 필자가 운영중인 블로그(티스토리, 네이버)에 전체 포스트를 동시게시합니다.

* 본 제품은 ICbanQ에서 후원하고 ICbanQ 무상 체험단 8기 활동의 일환으로 체험 제품을 제공받아 작성되었습니다.


얼마전 이메일을 확인하던중 전자부품 쇼핑몰인 ICbanQ에서 마스보드 A10 무상체험단을 모집 한다는 내용의 메일을 받게 되었습니다.  자작CNC 와 3D프린터 제작을 틈틈히 하면서 '리눅스기반의 소형 보드(라즈베리파이, 비글보드, 큐비보드등)를 이용해서 제어기로 사용하면 컨트롤 보드에 통합을 할수 있지 않을까?'라는 생각하고 있었습니다. (AVR 보드를 이용해 제어기로 사용해보기도 했지만 느린속도와 제한사항 때문에 현재는 구형 노트북에 EMC2를 설치해서 사용하고 있습니다.) 


그간 이것저것 부품을 사들여 버린 바람에 소형 보드를 구입하기엔 부담스럽기만 하던차에 받은 큐비보드와 사양이 비슷한 마스보드 체험단 모집 메일은 가뭄에 단비 같았습니다. 


모집인원이 10명이긴 하지만 일단 응모해 보았습니다. 체험단 선정자 발표날 명단을 봤더니 딱 제이름이 적혀있네요 온라인 발대식에 참여하고 보드를 받아 보게 되었습니다.


체험단에게는 3가지 미션이 주어졌는데 그중 첫번째 미션인 상품수령 개봉기 작성을 위해 포스트를 써내려가겠습니다.


상품을 받았을때 꽤 꽤 커다란 상자가 도착했습니다. 열어보니 뽁뽁이에 쌓인 작은 상자와 ICbanQ 로고가 새겨진 봉투하나가 들어있었습니다. 


작은상자안에 마스보드가 들어있었습니다. 작은 사이즈의 보드네요 그리고 SATA 케이블, mini USB 변환 케이, 2파이 USB DC 잭 케이블이 같이 있는것을 확인할수 있었습니다.


ICbanQ 로고가 새겨진 봉투안에는 마스보드 무상체험단이 수행할 미션을 안내해주는 내용 들어있네요


보드와 같이 들어있던 SATA, miniusb 변환 케이블, 2파이 USB DC 잭 케이블 입니다.


보드의 윗면에는 CPU, 램, nand 플래쉬, usb, miniUSB, LNA, SATA, DC, mini HDMI 커넥터 그리고 SD 슬롯 스위치 가 보이네요, 측면으로 나열되있는 확장 핀도 꽤 많이 보입니다.


아랫면에는 리얼텍 이더넷 칩과, 오디오잭, 기타 소자들이 보입니다. 


보드에 서포드를 끼워 보려했지마 3파이 서포트만 가지고 있는데 들어가지 않아서 고무판과 나무 조각을 이용해서 올려놓을 간이 거치대를 제작했습니다.


일단 사진처럼 놓고 사용할 예정입니다. 구동을 해보려 했지만 HDMI 케이블이 mini 타입이네요 가지고 있는 HDMI 케이블중에는 mini 타입이없는 관계로 케이블을 구해온후 구동을 해봐야겠습니다.


상품수령 개봉기는 여기서 마치도록 하고 다음에 작성할 포스트는 두번째 미션인 체험단 신청시 하고자 한 내용수행이 되겠네요. 리눅스를 지원하는 보드여서 신청시에 소형 리눅스 보드를 3D 프린터나 cnc의 제어보드로 사용한다면 컨트롤 보드에 통합을 할수 있지않을까? 라는 내용으로 신청 동기를 작성하였었습니다. 


다음번엔 두번째 미션 내용의 포스트로 찾아뵙도록 하겠습니다. 


끝까지 읽어주셔서 감사합니다.


- 2013.08.04 해의날에 프미케 -


* 본 포스트는 필자가 운영중인 블로그(티스토리, 네이버)에 전체 포스트를 동시게시합니다.

* 본 제품은 ICbanQ에서 후원하고 ICbanQ 무상 체험단 8기 활동의 일환으로 체험 제품을 제공받아 작성되었습니다.


+ Recent posts