개인 프로젝트진행중

비글본(beaglebone black) 얼굴인식(Face Recognition) 시험하기

g
2023.03.27에 시작
3
좋아요
2.8K
조회
0
댓글
비글본(beaglebone black) 얼굴인식(Face Recognition) 시험하기

사용 기술

기타Machine Learning & AIRaspberry PiSoftwareTensorFlowTexas Instruments

프로젝트 자료실

프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.

등록된 자료가 없습니다.

프로젝트 소개

사용 기술
기타Machine Learning & AIRaspberry PiSoftwareTensorFlowTexas Instruments

진행 기록

1
1차 — beaglebone black(비글본 블랙) 보드, OS Image 준비하기
2023.03.27

beaglebone black에서 Face Recognition을 시험해보기 위해서 beaglebone black Board 와 download할 OS Image를 준비합니다.

제가 가지고 있는 보드는 TI AM3359, 1GHz 512MB (On-board 2GB eMMC)입니다. 시험에 사용할 Image는 3.7GB정도되고 microSD card에서 Booting할것이므로 8GB이상의 microSD card를 준비합니다. 저는 16GB를 사용했습니다.

 

1. OS Image 다운로드

시험에 사용할 OS Image는 아래 Site에서 Download 합니다.

https://rcn-ee.net/rootfs/bb.org/testing/2023-03-03/bullseye-xfce-armhf/am335x-debian-11.6-xfce-armhf-2023-03-03-4gb.img.xz

 

 

저는 3월3일자로 했는데 지금보니 2023년3월10일 버전도 올라와 있습니다. 위Site의 다른 디렉토리를 찾아보면 Ubuntu 20.04버전이 올라간것도 있는데 Console버전이라서 gui를 지원하지 않습니다. 

 

 

2. OS image 만들기

다운로드받은 am335x-debian-11.6-xfce-armhf-2023-03-03-4gb.img.xz를 7-Zip을 이용해서 압축풀기를 하면 am335x-debian-11.6-xfce-armhf-2023-03-03-4gb.img가 만들어지고 Size는 3,686,400KB 정도가 됩니다. 

Booting image를 만들기 위해서 win32diskimager를 아래 site에서 다운로드후에 PC에 Install 합니다.

https://sourceforge.net/projects/win32diskimager

 

그다음 준비한 MicroSD 카드를 PC에 넣고 win32diskimager를 실행 시킵니다. 8GB, 16GB, 32GB상관 없습니다.

image File은 am335x-debian-11.6-xfce-armhf-2023-03-03-4gb.img를 선택하고 Device는 microSD카드를 인식한 Drive를 선택한다음 Write를 클릭해서 Booting image를 만듭니다. 이때 microSD 내용이 모두 삭제되므로 필요한파일은 미리 Backup 받아 놓습니다.

 

 

Booting image가 만들어지면 Successful 이라는 Popup이 뜨게 됩니다. 

이제 microSD카드를 beaglebone black의 microSD카드자리에 꽂습니다. 이제 Power On할 준비가 되었습니다.

다음편에 계속 됩니다.

2
2차 — beaglebone black(비글본 블랙) microSD Booting, USB driver설치하기
2023.03.27

 

1. microSD Card로 부팅하기

beaglebone black을 microSD카드로 부팅하기위해서는 mini USB케이블을 연결하기전에 사진상의 microSD Card라고 쓰여진부분 가까이에 있는 S2 스위치를 누르고있는 상태에서 USB을 연결해야 합니다. S2스위치를 누르고 있는 상태에서 USB를 연결하면 USER LEDS 4개가 쭈욱 켜진후 약 4~5초후에 꺼지고 그다음에는 각각의 LED가 Blinking하게 됩니다. 이때 누르고있던 S2 스위치를 놓아줍니다. 이렇게되면 microSD card로 정상 부팅된것으로 볼수 있습니다. 우리는 앞으로 항상 microSD로 부팅해야 하므로 S2스위치를 누르고있는 상태에서 mini USB나 5V2A전원 어댑터를 연결해야 합니다. 이제 USB드라이버를 설치 합니다.

 

2. beaglebone black USB driver설치하기

 

 

윈도우 탐색기로 보면 위와 같이 보이게 될겁니다. 이상태에서 E: 드라이브로 들어가서 USB driver를 설치하려고 하면 서명되지 않은 드라이버라고 뜨면서 Install이 실패하게 됩니다. 이럴경우 "윈도우키 > 설정> Windows업데이트 > 고급옵션 > 복구 > 고급시작옵션> 지금다시시작 > ...rebooting > 옵션선택/문제해결> 고급옵션 > 시작설정/다시시작 > ...rebooting > 시작설정/ 7)드라이버 서명적용안함 선택 > ...rebooting > 부팅후 beaglebone 드라이버 설치를 다시 진행합니다. (https://webnautes.tistory.com/698 참고하세요)

 

정상적으로 USB driver가 설치되었다면 아래 "윈도우키 > 설정 > 네트워크 및 인터넷 > 고급 네트워크 설정 > 관련 설정/기타 네트워크 어댑터 옵션"에서 아래 사진과 같이 "Remote NDIS Compatible Device"로 확인할수 있습니다. 저의 PC경우 이더넷6로 설치되었습니다.

 

 

다음편에서는 PuTTY로 연결해서 USB를 이용해서 Internet에 연결하는것을 진행하도록 하겠습니다.

3
3차 — beaglebone black(비글본 블랙) USB over Internet 연결하기
2023.03.28

beaglebone black에 5V2A전원 어댑터로 전원을 공급하고 USB hub에 마우스, 키보드를 연결하고 micro HDMI cable은 비글본 mini HDMI에 연결한다음 부팅을 시키면 아래와같은 모습으로 부팅을 합니다. 처음까만화면에 마우스 포인터하나보이다가 전체 화면이 보이게 됩니다. USB Cable로도 부팅이 되는데 PowerSupply로 보면 가끔 500mA이상 먹을때가 있습니다. 그래서 주변기기를 연결하고 작업을 할때는 5V2A전원 어댑터를 연결하는것을 좋을것 같습니다. 얼굴인식(Face Recognition)시험에 필요한 SW package를 설치하는 동안은 PuTTY로 연결해서 console로 작업을 하도록 하겠습니다.

 

 

 

앞으로 여러가지 Package를 Install하고 이미지파일을 저장해야될것이므로 microSD card의 partition을 확인하고 PC네트워크를 이용해서 Internet에 접속하는것을 진행하도록 하겠습니다.

 

1. PuTTY연결, microSD partition 확장확인

일단 PuTTY를 이용해서 beaglebone black에 연결합니다. 연결하기 위해서 아래와같이 setting합니다.

 

 

저는 BeagleBoneBlack으로 세션을 저장해놔서 저렇게 나옵니다. 매번 IP address를 입력하지 않으려면 세션을 저장해 놓는것이 편합니다.

Open을 클릭해서 최초 SSH로 beaglebone black에 연결되면 아래와같은 창이 뜨게 됩니다. Accept합니다.

 

 

login as : debian 을 입력하고  password : temppwd를 입력합니다. 아래와같이 login 합니다.

 

 

microSD partition확장관련해서 sudo reboot(S2 스위치 안눌러도됨) 하거나 USB뽑고 다시 연결해서(이때는 S2 스위치를 누르고있어야함) rebooting하게되면 microSD 파티션을 확장해 주게됩니다.  배포이미지에 이렇게 되도록 만들어져 있습니다. 따로 microSD확장하는것을 만들지 않아도 됩니다.

재부팅해서 microSD size를 보면 Avail 11G로 되어 있는것을 확인할수 있습니다.

 

 

2. Internet연결

먼저 PC의 네트워크셋팅을 합니다. 윈도우키 > 설정 > 네트워크 및 인터넷 > 고급네트워크설정 > 관련설정/ 기타 네트워크 어댑터 옵션을 선택합니다. 아래와 같은 화면이 뜹니다. 저의 PC경우 Wi-Fi e4ds_mesh 공유기를 통해 Internet에 연결되어 있고 이더넷6에 beaglebone이 연결되어 있으므로 저의 연결 기준으로 설명 하겠습니다. 여러분 각자의 연결은 다를수 있으니 방법만 참고하시기 바랍니다.

 

 

Wi-Fi를 선택하고 우클릭해서 속성창을 엽니다.

 

 

위화면에서 공유를 선택합니다.  그리고 다른사용자가 인터넷 연결할수 있도록 아래와같이 허용하고 홈 네트워크 연결을 선택해서 beaglebone black이 연결되어 있는 이더넷6 를 선택하고 확인을 눌러 줍니다.

 

 

그다음 beaglebone black이 연결되어 있는 이더넷6를 우클릭해서 속성창을 엽니다.

 

 

인터넷 프로토콜 버전 4(TCP/IPv4)를 선택하고 속성(R)을 클릭 합니다.

아래와같이 수정한후 확인을 눌러 줍니다.

 

 

이더넷6 속성창도 닫아 줍니다. 지금까지는 PC쪽의 네트워크 셋팅 이었습니다.

 

 

이제 PuTTY로 연결해서 beaglebone black를 셋팅합니다.

 

 

debian@BeagleBone:~$ ping 192.168.7.1

 

ping을 날려봅니다. 아래와같이 응답출력이 되면 beaglebone black과PC가 제대로 연결된것 입니다.

 


Ctrl-c로 ping을 중지합니다.

DNS서버 추가를 위해서 /etc/systemd/resolved.conf 의 주석처리된 부분 #DNS= 를 DNS=8.8.8.8 나 본인PC에서 사용하는 DNS ip로 변경 합니다. 저는 vi를 이용해서 edit했습니다. 

debian@BeagleBone:~$ sudo vi /etc/systemd/resolved.conf

 

 

DNS를 위와같이 추가하고 저장한다음 beaglebone black를 reboot합니다.

debian@BeagleBone:~$ sudo reboot

리부팅한후 기본gateway를 추가하고 Internet연결을 확인합니다. 참고로 PC 윈도우 네트워크 구성 부분을 계속 띄워놓고 있으면 비글본 이더넷6가 올라옵니다. 그때 PuTTY를 연결하면 답답함을 좀 덜수 있었습니다. 저의 경우에....

 

 

리부팅한후에 default gateway를 추가 합니다.  password : temppwd 입니다.

debian@BeagleBone:~$ sudo route add default gw 192.168.7.1 

 

 

아무런 Error가 없었다면 추가가 된것이고 구글로 ping을 날려봅니다. 아래와같이 응답이 오면 Internet이 연결 된것입니다.

 

 

defalut gateway는 beaglebone black이 새로 부팅했을때마다 매번 해주어야 합니다. 그래서 홈디렉토리내에 usb2net.sh로 만들어서 정상부팅 확인후에 실행시켰습니다. 만약 Internet이 연결이 안될때는 ping 192.168.7.1으로 PC와의 연결을 확인해 보시고 응답이 정상적으로 온다면 PC와 beaglebone black과는 문제가 없는것 입니다. 이럴때는 PC와 공유기 연결을 처음부터 다시 진행해 보시기 바랍니다.

 

#!/bin/sh
route add default gw 192.168.7.1
exit 0


주의할점은 usb2net.sh 파일을 작성한뒤 chmod 755 usb2net로 실행 가능하도록 해줘야 합니다.

이제 다음편부터 얼굴인식시험에 필요한 패키지들을 설치하는것을 진행하겠습니다.
 

4
4차 — beaglebone black(비글본 블랙) openCV, pytorch, tensorflow lite설치하기
2023.03.29

지금 OS image는 debian 11.6(bullseye)에 python 3.9.2가 기본포함되어 있습니다. 여기에 openCV 4.5.5.62, openCV-contirb 4.5.5.62, pytorch 1.8.1, tflite_runtime(tensorflow lite버전) 2.8.0 버전을 설치하도록 하겠습니다. 왜 이런 조합이 되었는지 궁굼하실텐데요. 저는 머신러닝 개발자는 아닙니다. 다른 Lab에서 ubuntu18.04+python3.8+openCV4.6+pytorch 1.1+tensorflow2.3 데스크탑 환경에서 개발하고 있는 모델이 있어서 그 모델이 beaglebone에서도 동작하는지 돌려보는 차원이었습니다. 그래서 처음에는 ubuntu18.04를 찾아서 package 설치를 시작했는데 진행하면서 각종 pakage간의 버전 종속성때문에 설치가 안되고, 버전에 맞는 Source build후 설치해야 하는데 각종 tool들도 버전이 안맞는다고 억지로 맞추어서 막상 build를 돌려놓으면 몇시간뒤에 보드가 stuck되거나 또다른 build error를 발생하는 문제가 발생했습니다. 그러다보니 어찌어찌 환경을 맞춘다하더라도 제대로 동작할지도 의심되서 가장 근접한 버전의 whl 파일들을 구글링으로 찾아서 설치하게 되었습니다. 잠깐 whl파일이 무엇인지보고 가겠습니다.

 

" What is a whl file ?

 

A WHL file is a Python Wheel file, which is a built-package format for distributing Python code. A Wheel is essentially a ZIP archive with a standardized file layout that includes metadata about the package, such as its name, version, and dependencies.

WHL files are used to distribute Python packages and their dependencies, making it easy to install and use Python packages on different systems. They are created using the "python setup.py bdist_wheel" command, which generates a wheel file that contains all the necessary files and metadata.

When installing a Python package using pip, pip will try to download a wheel file if available for the specific platform and Python version. This can save time and avoid the need for compiling the package from source code.

In summary, a WHL file is a distribution format for Python packages that simplifies the installation process by packaging all dependencies and metadata in a single file."

 

 

1. openCV 4.5.5.62설치하기

 

PuTTY로 연결된 상태에서 openCV, openCV-contrib, numpy를 설치하도록 하겠습니다.  numpy가 없으면 openCV를 import할때 Error가 발생합니다. beaglebone black이 Internet에 연결된 상태에서 아래의 설치 명령어를 차례로 진행합니다. 

 

debian@BeagleBone:~$ sudo apt update


debian@BeagleBone:~$ sudo apt upgrade

 

debian@BeagleBone:~$ sudo apt install software-properties-common -y

 

debian@BeagleBone:~$ sudo add-apt-repository ppa:deadsnakes/ppa

 

debian@BeagleBone:~$ sudo -H pip3 install --upgrade --ignore-installed pip setuptools

 

debian@BeagleBone:~$ sudo pip3 --no-cache-dir install opencv-python==4.5.5.62

 

debian@BeagleBone:~$ sudo pip3 --no-cache-dir install opencv-contrib-python==4.5.5.62

 

debian@BeagleBone:~$ sudo apt-get install -y libatlas-base-dev libhdf5-dev libhdf5-serial-dev libatlas-base-dev libatlas-base-dev libjpeg62 libwebp6 python3-libtiff libopenjp2-7 libavcodec-extra58 libavformat58 libswscale-dev libgtk-3-0

 

debian@BeagleBone:~$ sudo sudo pip3 install --upgrade numpy 

 

여기까지 특별한 문제 없이(노란색 WARN뜰수 있습니다)설치가 되었다면 python을 실행시켜 봅니다.

잘 설치되었다면 아래와같이 import할때 error없이 import되고 version확인이 가능합니다.

 

 

2. pytorch1.8.1, tflite_runtime 2.8.0(tensorflow lite) 설치하기

 

torch와 tflite_runtime을 설치 합니다.

 

debian@BeagleBone:~$ sudo apt-get install python3-pip libjpeg-dev libopenblas-dev libopenmpi-dev libomp-dev

 

debian@BeagleBone:~$ sudo -H pip3 install setuptools==58.3.0

 

debian@BeagleBone:~$ sudo -H pip3 install Cython

 

debian@BeagleBone:~$ sudo wget https://github.com/KumaTea/pytorch-arm/releases/download/v1.8.1/torch-1.8.1-cp39-cp39-linux_armv7l.whl

 

debian@BeagleBone:~$ sudo -H pip3 install torch-1.8.1-cp39-cp39-linux_armv7l.whl

 

debian@BeagleBone:~$ sudo wget https://github.com/PINTO0309/TensorflowLite-bin/releases/download/v2.8.0/tflite_runtime-2.8.0-cp39-none-linux_armv7l.whl

 

debian@BeagleBone:~$ sudo -H pip3 install tflite_runtime-2.8.0-cp39-none-linux_armv7l.whl

 

설치가 완료되면 같은 방법으로 import되는것을 확인합니다.

 

 

설치에 사용되었던 .whl파일을 zip으로 묶어서 첨부 합니다.

이제 얼굴인식 시험에 관련된 package가 설치 되었습니다. 다음편에는 USB Hub+마우스+키보드를 연결해서 Test image를 가지고 시험해 보겠습니다.

 

 

 

 

 

5
5차 — beaglebone black(비글본 블랙) 얼굴인식(Face recognition)시험하기
2023.03.30

이제 지금까지 설치한 package를 이용해서 간단히 얼굴인식 시험을 해보겠습니다.

Test code와 Test image를 bleaglebone black으로 옮기기 위해서 FileZilla를 설치 합니다. FileZilla 사용법은 간단합니다.

FileZilla 사이트관리자를 클릭해서 사이트를 등록합니다. SFTP, 192.168.7.2 , 포트는 안적어도 됩니다. 저는 beagleboneblack로 저장 했습니다.  비밀번호는 temppwd 입니다. 연결을 클릭 합니다.

 

 

연결되면 리모트사이트(beaglebone black)쪽에 시험용 디렉토리를 만듭니다. 저는 /home/debian/Testcode에 만들고 cap3.py, cascadetest.py, lena512.bmp 를 copy했습니다. (첨부 cap_cas_testcode.zip 테스트코드)

 

 

이제 FileZilla로 Test에 필요한 코드를 모두 옮겼으면 USB는 제거합니다. 이제 HDMI로 연결된 모니터를 보면서 시험을 진행합니다.

 

USB hub+키보드+마우스, micro HDMI cable로 모니터에 연결하고 5V2A전원 어댑터를 beaglebone black에 연결하여 microSD card로 부팅 시킵니다. 까만화면 왼쪽상단에 커서가 깜빡이다가 마우스 포인터가 보이고 그다음 바탕화면이 보입니다.

 

 

부팅된다음 화면 아래쪽 Terminal을 열고 이전에 만들었던 /home/debian/Testcode 디렉토리로 이동합니다.

 

 

Test용 python 코드를 실행시킵니다. 시험용 코드는 lena512.bmp 에서 얼굴과 눈을 Detection해서 화면에 표시하고 cascadeimage.jpg 파일로도 저장하는 코드 입니다. 

 

 

 

beaglebone black에서 아래와같이 Test code를 실행 시킵니다.

debian@BeagleBone:~/Testcode$ python cascasdetest.py 
 

 

 

아래와 같이 실행 결과가 화면에 Display되고 파일로도 저장됩니다. 저장된 파일은 FileZilla로 꺼낼수도 있습니다.

 

 

lena512.bmp 에서 얼굴과 눈을 찾아서 표시하고 저장도 됬습니다. 일단 여기까지 beaglebone black에서 얼굴인식 하는것을 시험해 봤습니다. beaglebone black이 나온지 꽤 오래된 보드인데 아직까지 ubuntu, debian을 release하고 있어서 가능했던것 같습니다. 간단한 시험이지만 머신러닝에 대한 자극을 받는 계기가 된것 같습니다. AI보다 인간이 더 많이 끊임없이 학습해야 된다는것을 느낍니다.

감사합니다.

 

 

6
6차 — [추가] beaglebone black(비글본 블랙) Camera capture하기
2023.03.30

Camera Capture하면서 작업하는것이 있을것 같아서 beaglebone black에 USB Web cam을 붙여서 간단히 Capture하는것을 해보았습니다. 시험에 참여한 Web cam은 IRIVER HD720P 모델입니다. USB web cam을 연결할때 beaglebone black의 전원을 끄고 USB Web cam을 USB hub연결한상태에서 전원을 연결하여 부팅시킵니다.  비글본을 Internet에 연결합니다. (3단계 USB over Internet부분 참고하세요)

아래 영상처리에 필요한 package들은 설치 합니다.

 

debian@BeagleBone:~$ sudo apt install pkg-config

 

debian@BeagleBone:~$ sudo apt-get install v4l-utils

 

debian@BeagleBone:~$ sudo apt-get install -y libv4l-dev

 

debian@BeagleBone:~$ sudo pip install v4l2p

 

Camera control관련 pakage가 Install되면 아래 command로 USB Web cam의 정보를 확인합니다. USB2.0 IRIVER HD720P Camera로 인식되었습니다.


debian@BeagleBone:~$ lsusb

 

 

정상적으로 동작하는지는 /deb 디렉토리에서 ls 후에 video0 있는지 확인해야 된다고 합니다.  video0가 보입니다.

 

 

이제 IRIVER HD720 Camera가 지원하는 format을 확인합니다.

 

debian@BeagleBone:~$ v4l2-ctl --list-formats

 

 

Motion-JPEG, YUYV format을 지원한다고 되어 있습니다. 저도 처음에 Capture가 안되서 이리저리 찾아보다가 아래 Test code의 line 7을 추가하고 Capture가 동작되었습니다. 이글을 보시는분들의 USB Web Cam은 모두 다를것이므로 Capture, Video 처리등을 하실분들은 Camera 관련 v4l2-ctl  명령어를 더 확인해 보셔야 합니다.

 

 

이제 Capture Test code를 실행 시킵니다.

debian@BeagleBone:~$ python cap3.py

 


 

아래쪽에 preview라고 화면이 보입니다.  키보드에서 'q'를 입력하면 마지막 Frame이 Capture될 겁니다. 1280x720 outputImage.jpg로 저장됩니다. 이제 Camera 캡쳐까지 진행해 보았습니다. Idea가 많으신분들은 더 많은것을 해보실수 있을거라고 생각 됩니다. 지금까지 수고 하셨습니다.

 

감사합니다.

코드 & 회로도

등록된 코드/회로 자료가 없습니다.

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨보세요!