Using phpmyadmin with LAMP Template

posted Apr 23, 2018, 12:02 AM by Sundew Shin   [ updated May 9, 2018, 12:24 AM ]

flat provides the both phpMyAdmin and LAMP (Linux+Apache+MySQL+PHP) stack in the template library.
Using LAMP template is straight forward. You only need to decide which ports to use in host to expose the container's 80 (http) and 3306 (mysql) ports to the outside the world (with 'bridged' network option) or to just inside (with 'host') network.

Learning how to administrating MySQL database, however, requires many man-hours to learn for anyone until he/she gets to comfortable using it. Thankfully, if you are a first time user wanting a simple database back-end for your DIY project to store some timestamped sensor values to just keep pouring into, it can only take a couple of hours for acquiring the needed very basics, but I understand from own experience it can be stressful too if you only have the CLI (Command-Line Interface) option to interact with MySQL, a sophisticated database supports many commands and options to manage things. phpMyAdmin has great name value which has long history of making this process much enjoyable by providing everything in neat organized tables and drop-down menus and clickable options. It is not only easy to use but so powerful that you can easily add additional DB users, limit their access locations, backup databases, and, this list can keep going like this for awhile.

TL;DR

This article assumes that you already have a running LAMP container that you want to link to new phpMyAdmin container.
Here's what mine look like for now. I have one LAMP container running and reconfirm the TCP port 3306 has been exposed for access from outside container. (UPDATE: Please ignore the IP red-boxed. Thanks to a recent update, we no longer need to remember that for local access.)


Now open the phpmyadmin template screen, and we input the target MySQL database host's IP on the 'MySQL IP address' input field (UPDATE: or, leave as blank for local access.)

Next we port-map its '80' to something else (I used '81') because we already used '80' for the LAMP container.
If you want to maintain a persistent session data, you may want to either create a new volume with more recognizable name or bind to an existing host's directory. Once the container created, please remember its IP for later use also.


Open web browser, and let's check. Try username 'root' without password: 


Oops. It's failed.
Don't worry. Nothing is wrong. It's not the newly created phpMyAdmin not allowing your login, but the MySQL in the separate LAMP container. It is simply doesn't know yet our phpMyAdmin container to trust its root to be logged through with/without providing rightful password.
So let's do that.

Open the console of the LAMP container.
First type 'mysql' to enter CLI, and then input:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.4' IDENTIFIED BY 'your_password' WITH GRANT OPTION;


It means to trust it's superuser ('root') to login from the IP, 172.17.0.4 (phpMyAdmin's) with the password 'your_password'
You can leave the password blank, but it is recommended. Also, you can put '172.17.0.%' to allow any access from local container network, then you don't need to let MySQL know each time you create new phpMyAdmin containers.


Now it's all yours.
Please visit https://www.phpmyadmin.net/ for manuals and how-to.

Enjoy your projects.

Using Samba Share/Client templates

posted Apr 15, 2018, 3:13 AM by Sundew Shin   [ updated Apr 15, 2018, 4:21 AM ]

Samba Share

Sharing SBC's directory with Windows PCs cannot be easier with some flat trick.
Using 'Samba Share' (smb server) and 'Samba Client' (smb client) templates, it only takes few clicks and inputting essential data, and Windows machines will access the shared directory as soon as the container start.
Stopping sharing? Just one click that either pauses or stops the container, and that's it takes. 

Sharing Host's Directory

This is more common use for this template. Basically you are offering SBC's (uncontainerized) directory to the Windows file sharing network. For example, you can easily share '/home/pi' directory to the outside.


Now, from your Windows PC, open Windows Explorer (shortcut, window+E), and type '//' with following the SBC's hostname.
In this example the hostname is 'panel'. so I typed '//panel'
You will see the directory (folder) and contents SBC's just shared.


Sharing Container's

You can simply leave the '/samba_share' directory unbind. 
Again, It is less common use case, but in some case it can be very useful.

Samba Client

Using this template, you can mount network folders Windows machines and other samba servers shared in your network.
Please note the mount point will be created inside the new container.


안드로이드폰을 USB연결 모니터로

posted Apr 8, 2018, 2:49 AM by Sundew Shin   [ updated Apr 16, 2018, 1:27 AM ]

안드로이드폰을 USB로 연결해서 SBC의 모니터/입력장치로 사용하는 방법을 알아봅니다.
일반적인 VNC로 SBC의 X윈도를 원격 접속하는 방법과 다를 바 없는데, 대신 네트워크 설정없이, 즉 네트워크 환경에 의존 없이, 유선으로 두 기기만 연결함으로써 보안, 저속화면전송, 네트워크 단절 같은 문제를 해결합니다.

준비물

- RPi, 팅커보드 및 기타 arm기반 SBC
- 안드로이드폰 5.0+ (Lollipop 이 상)
- USB 케이블

방법-1: 직접(쉘) 설치

[SBC에서]
1. VNC 서버를 설치합니다.
sudo apt-get update && apt-get install tightvncserver -y

2. VNC 뷰어에서 입력할 연결암호를 설정합니다.
vncpasswd

3. adb를 준비합니다.
ADB(Android Debug Bridge)를 데비안 기반 리눅스에 설치하는 표준방법은 'apt-get install android-tools-adb'입니다만, 2018년 3월 현재, 이렇게 해서 설치되는 버전은 라즈비안의 경우 1.0.31로 여기서 우리가 하려는 목적을 이룰 수 없습니다. arm 버전의 ('adb reverse' 명령을 지원하는) adb 1.0.32버전 이상이 필요한데 최신 Android-SDK를 직접 받아 컴파일해도 좋고 아니면 준비된 binary 파일을 복사해 옵니다.
git clone https://github.com/pipcc/adb-arm.git
sudo cp adb-arm/adb-arm /usr/bin/adb


이제 명령줄에서 'adb version'이라고 쳤을 때 다음과 같은 문자열이 프린트되면 정상 준비된 것입니다:
Android Debug Bridge version 1.0.32

4. 폰을 USB 케이블로 연결합니다.

5. 처음으로 폰과의 연결을 시도 합니다.
adb wait-for-device

[안드로이드폰에서]
6. 그러면 바로 폰 화면에 'USB 디버깅을 허용하시겠습니까? (Allow USB debugging?)'하는 대화창이 뜨고 아래 채크박스('Always allow..')를 눌러준 다음 확인을 누릅니다.
(그전에 개발자 옵션(Developer options)의 'USB debugging' 기능이 켜져 있어야 하는데 인터넷에 많은 설명이 있음: 그중 하나)


[SBC에서]
7. 다시 RPi로 돌아와 'adb devices'라고 쳤을 때 다음과 같은 메시지가 출력되면 SBC<->폰 연결이 완성된 것입니다.
List of devices attached
ZY224MXZMN device

8. 이제 VNC 서버를 실행할 차례입니다. 다음과 같이 폰 화면에서 사용할 X의 해상도와 색상 정도를 지정합니다. 끝에 'localhost'와 ':1' 사이에는 공백이 하나 있음을 주의합니다.
tightvncserver -geometry 1920x1080 -depth 16 -localhost :1

참고로, '1080x1920'같이 하면 화면이 밑으로긴 portrait 상태로 보입니다. 그리고 명령 줄에 (loopback-only) '-localhost' 옵션을 빼면 USB로 연결된 폰 이외의 기기에서도 SBC가 연결된 네트워크를 통해 '[SBC IP]::5901' 주소로 접속할 수 있음을 꼭 기억합니다.

9. 폰과 SBC의 포트(5901)를 서로 연결해 줍니다.
adb reverse tcp:5901 tcp:5901

[안드로이드폰에서]
10. 폰에 VNC Viewer 앱을 설치합니다. 여기서는 'VNC Viewer - Remote Desktop'을 사용합니다.

11. 'New Connection'버튼을 눌러 다음과 같이 VNC 서버 정보를 넣습니다.
localhost::5901


12. 여기까지 해서 SBC에 준비된 기본 X 화면이 뜨면 모든 과정이 끝났습니다.

방법-2: 플렛에 설치

1. 위에 '직접 설치' 방법과는 달리, 제일 먼저 안드로이드폰을 USB 케이블로 연결합니다.

2. 'X Android' 템플릿을 찾아 선택 합니다.

3. 아래 설정화면처럼 기본정보를 넣어 주세요.
(처음 설치시 약 200MB 파일을 다운로드 받는 만큼의 시간이 소요 됩니다.)

4. 컨테이너가 만들어지자마자 (앞서 직접설치-6단계와 같이) 자동으로 폰 화면에 USB 디버깅 허용을 묻는 화면이 뜨면 그다음부터는 작업과정이 같습니다.

[주의]
직접설치 방법은 호스트(SBC 자체)의 하나뿐인 유일한 X 환경이 직접 폰 화면에 나오지만 플랫을 사용했을 때는 (호스트로부터 격리된, 컨테이너마다 다른) 컨테이너 안의 X 환경이 나온다는 점입니다. 자세한 사항은 다르지만 쉽게 설명해서 MS윈도 호스트에 설치된 VMWare안에 새로 만든 하나의 가상 머쉰의 윈도 화면을 보게 된다고 생각하시면 이해하기 쉽습니다. 즉, 호스트의 윈도와는 완전별개이지만 호스트의 모든 H/W 자원을 사용할 수 있는 격리된 환경 말입니다.

플렛의 모든 템플릿의 기반은 Raspbian Lite이므로, 기본 모습은 화면 왼쪽 위에 xterm만 하나 떠있는 변경되지 않은 최초의 X 상태입니다.

5. (옵션) 이 xterm에서나 컨테이너의 콘솔에서 명령을 실행시켜 원하는 윈도 매니저를 추가설치 할 수 있습니다.
apt-get update && apt-get install lxde-core lxappearance -y 명령으로 LXDE를 설치하거나, 혹은,
apt-get update && apt-get install xfce4 xfce4-terminal -y 명령으로 XFCE를, 아니면,
apt-get update && apt-get install mate-desktop-environment-core -y 명령으로 MATE를 설치할 수도 있습니다. (참고)

마지막으로 컨테이너를 재시작('Restart')하고 다시 폰에서 VNC 접속하면 새로운 윈도매니저를 확인할 수 있습니다. (여러 개의 윈도매니저가 있을 때는 lightdm같은 로그인매니저를 추가설치해서 선택합니다.)

OSMC 서식 활용

posted Apr 3, 2018, 10:20 AM by Sundew Shin   [ updated Apr 15, 2018, 4:22 AM ]

RPi에 OSMC 다커 컨테이너를 설치합니다.

이 방법의 장점은 다음과 같습니다:
  • 기존에 사용 중인 라즈비언 OS 등을 그대로 쓸 수 있습니다.
  • 컨테이너를 정지시키면 OS에 어떤 부담(load)도 주지 않습니다.
  • 악성 플러그인의 슈퍼유저(root) 권한 탈취를 원천차단합니다. (chroot isolation)
  • OSMC를 위해 SD카드를 새로 준비하지 않아도 됩니다.
  • 최신 3/16/2018일 자 OSMC_TGT_rbp2_20180316.img를 사용합니다.
  • 관련 다커 이미지까지 삭제하면 원래 OS에 아무런 흔적이 남지 않습니다.
    docker rmi wednus/rpi-osmc

준비물

  • 플렛 v0.1.1 이상 (업데이트 안내)
  • RPi 2/3/3+
  • 디스플레이 (LCD 또는 HDMI로 연결)
  • 입력장치: 마우스, 키보드

설치

1. 'OSMC' 서식을 선택합니다.
2. 컨테이너가 만들어지면 더 이상 추가 작업은 없습니다. 이 과정에서, 처음 사용 시 500MB 정도 파일을 내려받는 시간이 소요됩니다.



유의사항

아무래도 chroot 환경에서 실행되다 보니 권한 등의 문제로 안되는 기능들이 있습니다. SD 카드로 설치했을 때는 되지만 플랫에서는 안되는 기능이 있다면 알려주세요.

알려진 문제점

- 일부 비디오파일 실행 시 OSMC 컨테이너 정지 (코덱 정보 필요)
- App Store의 앱 설치 안 됨: TVHeadend Server, Samba (SMB) Server
--> docker container안에서 systemd 실행문제 해결해야 함

디지털 사이니지 서식 활용

posted Apr 3, 2018, 10:19 AM by Sundew Shin   [ updated Apr 15, 2018, 4:30 AM ]

원격에서 SBC에 연결된 디스플레이로 (RPi 전용 LCD 등) 디자인된 웹페이지 또는 동영상을 재생 할 수 있는, 디지털 액자로도 불리는, 사이니지 (signage)를 만들어 봅니다.
Kiosk 모드와 달리 스크린 터치, 혹은, 입력장치를 통한 사용자 입력을 받지 않습니다. (non-interactive)

준비물

  • 플렛 v0.1.1 이상 (업데이트 안내)
  • RPi, 팅커보드 등 arm기반 SBC
  • 디스플레이 (HDMI로 연결)
  • 옵션: 스피커/이어폰

설치

1. 'Signage' 서식을 선택합니다.



2. 아래 설정화면에서 기본정보를 넣어 주세요.
  • URL: 이 뷰어는 Chromium을 기반으로 하고 있어서 크롬브라우져로 볼 수 있는 모든 콘텐츠의 URL을 지원합니다.
  • Refresh (분): 콘텐츠를 지정한 시간(분)마다 갱신합니다. 즉 '5'라고 입력하면 5분마다 화면이 처음상태로 갱신 됩니다. 동영상 등을 끝없이 반복 재생할 때 편리합니다. 빈칸으로 두면 반복하지 않습니다.



3. 컨테이너가 만들어지면 더 이상 추가 작업은 없습니다. 이 과정에서, 처음 사용 시 380MB 정도 파일을 내려받는 시간이 소요됩니다.
컨테어너가 잘 생성되면 자동으로 URL로 지정한 콘텐츠가 디스플레이로 나옵니다.

활용

물론 동영상 재생도 가능합니다.
유튜브는 아래와 같이 embed 코드에 있는 URL을 복사해 옵니다:



여기에 시작과 동시에 자동재생을 위해 '&autoplay=1' 옵션을 추가해서 URL란에 입력해줍니다.
https://www.youtube.com/embed/pfDSVriFHps?rel=0&amp;controls=0&amp;showinfo=0&autoplay=1

유의사항

  1. 이 서식은 X 세션을 사용하면서 호스트(SBC)에 연결된 마우스와 키보드의 제어권을 가져가게 되고 컨테이너를 강제종료했을 때는 이것이 미처 돌아오지 않을 수 있습니다. 이 경우 SBC에 SSH로 접속해서 'sudo pkill X' 명령을 수행합니다. 그래도 안될 때는 재부팅 합니다.
  2.  이 서식으로 만들어진 컨테이너는 동시 실행할 수 있는데, 이 경우 최종 실행된 컨테이너의 화면이 제일 앞에 나오게 되고, 오디오는 뒤에 가려진 컨테이너의 것과 겹칠수 있으니 (일부러 믹싱 하는것이 아니라면) 주의하세요.
가려진 컨테이너를 다시 위로 올릴 때는 해당 컨테이너를 재 시작(Restart)하면 됩니다.

RetroPie 서식 활용

posted Apr 3, 2018, 10:18 AM by Sundew Shin   [ updated Apr 17, 2018, 4:45 AM ]

알림

이 서식은 현재 플랫에서 사용하는데 몇 가지 문제점이 발견되었습니다.
문제가 해결되기 전까지는 쉘에서 직접 컨테이너를 생성해서 사용할 수 있습니다.
  • docker run -it --name retropie --privilged wednus/rpi-retropie
현재까지 발견된 문제점은 다음과 같습니다.
  • Emulatorstation 부팅 후에 사용자가 'RetroPie' 메뉴에서 설치 패키지를 또 업데이트 하면 롬폴더의 위치가 바뀌는 문제
    '/root/RetroPie' -> '/home/flat/RetroPie'
  • Retroarch 설정화면에서 키보드/마우스 입력이 안되는 문제





RPi에 RetroPie('레트로파이')를 설치 해 보겠습니다.
이 프로그램에 대한 설명이 필요하신 분은 '레트로파이 홈페이지'를 참고하세요.

플랫을 사용하지 않으실 분들은 아래 링크의 내용을 따라 해 주시면 됩니다.
- https://github.com/retropie/retropie-setup/wiki/First-Installation

준비물

  • 플렛 v0.1.1 이상 (업데이트 안내)
  • 에뮬레이터 게임롬
  • SBC에 직접 연결된 TV나 LCD 디스플레이
  • 게임 패드/컨트롤러(추천), 또는, 키보드

설치

0. 우선 호스트(RPi)가 PIXEL 등 X윈도우에 로그인 되어 있는 상태라면 로그아웃합니다.
나중에는 레트로파이 실행 전에만 하면 되지만 단계2에서 컨테이너가 만들어지면 자동으로 실행되기 때문에 편의상 여기서는 설치전에 먼저 실행합니다. 잘 모르겠으면 RPi 터미널창 어디에서던 다음 명령을 실행 하면 됩니다:
(lightdm을 X윈도우셀렉터로 사용하실 때의 예입니다)

sudo service lightdm stop

1. 'RetroPie' 템플릿을 선택 합니다.

2. 아래 설정화면처럼 기본정보를 넣어 주세요.
나중을 위해 레트로파이가 게임롬을 찾는 위치와 RPi의 '/home/pi/RetroPie'를 바인딩합니다. 폴더의 위치나 이름은 달라도 상관없습니다. 이 폴더의 내용물은 자동으로 채워집니다.
(처음 설치시 약 500MB 파일을 다운로드 받는 만큼의 시간이 소요 됩니다.)



3. 컨테이너가 완성 되면 자동으로 기본 프론트엔드인 'Emulatorstation'이 실행되고 다음과 같은 화면이 RPi에 연결 된TV나 LCD화면에 나타날 것입니다. (아래는 게임패드 하나가 연결 되어 있는 상태의 모습입니다.)
게임패드가 없으면 키보드를 사용해서 기본 메뉴 사용설정을 마칩니다. (아무 버튼이나 꾸욱 3초쯤 누르시면 설정메뉴로 들어갑니다.) 이 밖에 다양한 개임패드별 설정 정보는 다음 페이지를 참고하세요.
https://github.com/retropie/retropie-setup/wiki/First-Installation



4. 이제 게임롬을 넣을 차례입니다.
먼저 RPi의 '/home/pi/RetroPie' 디렉토리로 가보시면 다음과 같이 기본구조가 만들어 져 있을 것 입니다.



여기에 게임롬들을 종류별로 해당 되는 폴더에 복사 해 넣습니다.
예를들어 MAME에서 동작하는 게임롬들은 '/home/pi/RetroPie/mame-libretro' 폴더에 집어넣는 식입니다.
MS윈도우즈 PC에서 복사해 넣을 떄는 Filezilla 같은 SFTP 툴을 사용하면 편리합니다.
(참고: http://cafe.naver.com/pipc/21126)
먼저 테스트로 몇개만 집어 넣고 다음 단계로 넘어 갑니다.



5. 게임롬을 추가 했으면 'Emulatorstation'을 재실행 해야 합니다.
앞서 컨트롤러 설정에서 'Start'로 지정 했던 버튼을 누르시면 다음과 같은 화면이 나옵니다.
여기서 'QUIT > 'RESTART EMULATIONSTATION'을 선택 합니다.



6. 잠시후에 게임롬이 추가된 에뮬레이터가 활성화 된 모습이 보이면 설치가 완료 되었습니다.



수고 하셨습니다.

여기서 부터의 설정은 일반 레트로파이 설정과 같으므로 유튜브 등을 참고하세요.
https://www.youtube.com/watch?v=xvYX_7iRRI0

그럼 이제부터 즐거운 추억 여행을 떠나 보세요. 출발~



----
마지막으로 레트로파이를 RPi에서 올리고 내리고는 'Container' 메뉴에서 'Start'/'Stop'으로 제어 하면 되겠죠.

누군가가 RPi를 게임기로만 쓴다고 뭐라 하기전에, 가끔은 미리 만들어 놓은 TensorFlow 컨테이너를 띄워서 이미지 패턴 머쉰러닝 코드를 열심히 노려 보는겁니다. -.-
사는게 녹녹치 않죠, 하지만, 모두를 위한 센스가 본인과 사랑하는 사람들의 수명연장에 도움이 됩니다. =)

화이팅!

인터넷 트래픽 IP 숨기기 (Tor)

posted Apr 3, 2018, 10:17 AM by Sundew Shin   [ updated Apr 15, 2018, 4:23 AM ]

Tor('토르')를 설치 해서 주고 받으시는 인터넷정보에 보안(익명성)을 더해 보겠습니다.
시작에 앞서 자세한 내용은 '토르' 위키페이지를 참고하세요.

플랫을 사용하지 않으실 분들은 아래 링크의 내용을 따라 해 주시면 됩니다.
- https://learn.adafruit.com/onion-pi/install-tor

준비물

  • 플렛 v0.1.1 이상

설치

1. 'Tor' 템플릿을 선택 합니다.

2. 아래 설정화면에서 기본정보를 넣어 주세요.



3. 컨테이너가 만들어지면 더 이상 추가 작업은 없습니다.

활용

이제 잘 설치 되었는지 확인 해 보겠습니다.
여기서 부터는 RPi (호스트)의 터미널이나 X윈도우즈상에서 이뤄집니다. (Tor 컨테이너속이 아닙니다.)
명령줄에서 다음과 같이 실행 해 봅니다.

curl -L http://ifconfig.me

그러면 변경되지 않은 자신의 진짜 IP가 나옵니다.
이제 Tor 네트웍을 경유해서 같은 사이트를 접속해 보겠습니다.

curl --socks http://localhost:9050 -L http://ifconfig.me

밑에 그림처럼 IP가 낯선것으로 변경 되었으면 토르가 잘 동작하는 것입니다.
그럼 이제 토르를 사용하도록 하면서 웹브라우져를 구동 시켜 보겠습니다. (크롬을 사용 합니다)

chromium-browser --proxy-server="socks5://localhost:9050"



크롬이 설치 되어 있고 창이 오르면 주소창에 'https://check.torproject.org' 입력 합니다:



위와 같은 메시지가 나오면 이제 부터의 웹브라우징은 좀더 안전하게 되었습니다.
설치 확인이 모두 끝났습니다. 수고 하셨습니다.

토르 컨테이너가 가동중('Running')에는 내부네트웍 트래픽(192.168.1.*) 이외의 모든 인터넷 트래픽이 이렇게 (계속 바뀌는) 제3지대의 서버를 경유하므로써 진짜 IP를 숨기게 됩니다. 물론 안전해진 대신 통신속도는 더 낮아 지게 됩니다.
반대로 다시 원래대로 가시려면 플랫에서 해당 컨테이너를 찾은 뒤 'Stop'버튼을 누르시거나, 아니면 명령줄에서:

docker stop tor #또는 다르게 입력한 Tor 컨테이너 이름

프로그램 삭제 또한 간단합니다:
docker rm tor # 컨테이너 지우기
docker rmi wednus/rpi-torproxy # Tor 탬플릿 이미지 지우기


그럼 이제 토르와 함께 안전하게 인터넷사용 하세요~

OpenCV 설치하기

posted Apr 3, 2018, 10:16 AM by Sundew Shin   [ updated Apr 15, 2018, 4:24 AM ]

OpenCV 최신 버젼 (v3.2.0) 를 설치 해 보겠습니다.

플랫을 사용하지 않으실 분들은 아래 링크의 내용을 참고 해 주세요.

준비물

  • 플렛 v0.1.1 이상
  • USB 웹캠 (물론 PiCam으로도 할수 있는데 일부 수정작업이 필요 합니다.)

설치

1. 'OpenCV+' 템플릿을 선택 합니다.
OpenCV+는 OpenCV 템플릿에 X와 원격데스크탑 연결을 위한 xrdp, 그리고 윈도우 메니져인 jwm이 추가된 템플릿입니다. 우리는 VideoCapture 클레스를 사용 해서 웹캠으로 부터 받은 영상을 직접 사용할 계획이기 때문에 이 탬플릿을 선택 하고 있습니다.



2. 아래 설정화면에서 기본정보를 넣어 주세요.
여기서 중요한 것은 'RDP (root) Password'란에 넣는 암호입니다.
윈도우즈의 원격데스크탑(RDC) 프로그램을 사용해서 만들어질 OpenCV+ 컨테이너에 접속 하는데, 이 때 사용하게 될 사용자 (아이디) 'root'의 암호가 여기에 넣는 문자열이 됩니다.
(처음 설치시 약 400MB 파일을 다운로드 받는 만큼의 시간이 소요 됩니다.)



3. 컨테이너가 만들어지면 더 이상 추가 작업은 없습니다.

활용

1. 그럼 이제 원격데스크탑을 사용해서 접속 해 보겠습니다.
사용하시는 RPI의 IP를 다음과 같이 넣어 주시고 연결 합니다.



2. 이제 다음과 같은 화면이 나오는데, 이 전 단계에서 입력했던 암호를 여기 넣어 줍니다.



3. 몇초가 지나면 jwm 윈도우메니져 실행이 완료 될 것입니다.

jwm을 선택한 이유는 리소스를 최소로 사용하면서도 누구나 사용할수 있을 만한 것이라고 생각했기 때문입니다. OpenCV가 많은 리소스를 사용하는 만큼 이런 부분도 참고하시기 바랍니다.


(자료 출처: 'Making linux run lightweight with desktop' - thebot.net)

4. 좌측 위에 터미널창이 하나 나오고 '/data' (기본) 폴더에 몇가지 샘플 코드를 넣어 두었는데, 바로 직접 얼국인식 프로그램을 구동 시켜 보겠습니다.
다음과 같이 입력 하고 실행 시킵니다:

python face_seeker.py



5. 사용하시는 웹캠의 기종에 따라 속도나 에러 유무등이 다른데, 특별한 문제가 없다면 아래와 같이 비디오창이 나옵니다. 곧이어 프로그램이 얼굴(들)을 찾아 아래와 같이 녹색 상자로 표시하기 시작 할 것입니다.



설치 확인이 모두 끝났습니다. 수고 하셨습니다.

구글에서 'opencv [하고자 하는 작업]'을 키워드로 찾아 보시면 수많은 자료가 나옵니다.
각 용도에 맞게 자유롭게 설정 변경과 프로그램 추가 설치 등을 하시면 됩니다.
잘못되서 처음으로 돌아 가고 싶을때는 위에서 했던 작업을 반복해서 다시 하면 그만입니다.
두번째 부터는 탬플릿을 다운로드 하는 과정이 사라지므로 새 컨테이너 생성에 10초가 채 걸리지 않을 것입니다.

그럼 즐거운 OpenCV 해킹 되세요~

관련자료:

구글 어시스턴트 설치하기

posted Apr 3, 2018, 10:15 AM by Sundew Shin   [ updated Apr 15, 2018, 4:24 AM ]


(이미지 출처: VentureBeat)

구글 어시스턴트('GA') 를 RPi에 설치 해 보겠습니다.
플렛을 사용하지 않을 분들은 아래 붙은 유튜브 비디오 전체 과정을 따라 해 주세요.

지난번에는 'AI (인공지능) Pi'를 설치 해 봤는데요,
현재 개발시점에서 아마죤 애코('Alexa')와 GA 사이에 몇가지 차이점들이 보입니다:
  • 키보드를 써서 음성명령을 내립니다.
  • 응답속도가 훨씬 빠릅니다.
    비교적 덜 생각(클라우드 연산)하고 말하는 것들도 있는것 같어서 꼭 장점만은 아닌것 같습니다.
  • Alexa와 달리 내 위치를 정확히 알고 있습니다.
    구글맵 등을 통해 안드로이드폰이 구글계정으로 연결 되어 있으면 더욱 정확합니다.
  • 다국어 지원이 조금 되고 있습니다.
    "Can you speak Korean?"이라고 물으면 'No'라고 하지만, "what's 'I am sorry' in Korean?"이라고 하면 "미안"이라고 말해 줍니다. 영어 이외의 언어에서는 목소리가 바뀌는데 아무래도 Google translate에 있는 샘플링을 그대로 사용 하는것 같습니다. 참고로 "Can you speak Japanese?"라고 하면 'Yes'라고 말 합니다. 좀 더 자신 있는 언어가 따로 있는 것 같습니다.

준비물

  • 플렛 v0.1.1 이상 (업데이트 안내)
  • 구글 GA API 활성화가 된 계정 (무료)
  • 키보드: 음성입력용 엔터('Enter') 버튼 사용
  • 스피커: 3.5mm 오디오 잭으로 연결
  • USB 마이크, 또는, 마이크 입력이 있는 USB 웹캠

설치

0. 먼저 다음 동영상을 시청 해 주세요. 초기설정에 필요한 구글 GA API 정보를 얻는 방법이 나옵니다.
일단 0분41초 -> 2분35초 사이 내용에서 'client_secret_XXX.json' 파일을 내 컴퓨터에 다운로드 받는 부분까지 따라 하세요. 빠르게 진행되는데 중간 중간에 잠시멈춤을 하면서 보시면 크게 어렵지 않습니다.

1. 'Google Assistant' 템플릿을 선택 합니다.



2. 앞서 준비 한 client_secret_XXX.json 파일을 메모장에서 열어서 그 내용을 'Client Secret'란에 복사/붙여넣기 하고 'Create' 버튼을 누릅니다.
(처음 설치시 약 250MB 파일을 다운로드 받는 만큼의 시간이 소요 됩니다.)



3. 컨테이너가 만들어지면 자동으로 'Container' 리스트 화면으로 이동 됩니다. 여기서 입력하신 컨테이너 이름을 클릭 합니다.

4. 중간쯤을 보시면 'Console' 링크가 있습니다. 링크를 누르고 그 다음 화면에서 'Connect' 버튼을 누릅니다.



5. 입력줄에서 'ga' 명령을 내립니다. 다음과 같이 'https' 부터 'Enter..'로 시작되는 줄 이전 문자열을 복사해서 새로운 웹브라우져에서 열고 사용자 확인 절차를 진행 합니다.
(비디오에서는 5분34초부터 진행 되는 작업입니다.)




6. 확인절차 마지막에 나오는 인증코드를 복사해서,



7. 다시 터미널창으로 돌아 와서 붙이고(Ctrl+Shift+V), 그 다음, 입력(Enter)키를 누르면 설치가 끝이납니다.




이제 부터 'ga' 명령으로 프로그램을 실행 하고 음성명령을 내릴 때마다 입력키('Enter')를 한번씩 누르시면 됩니다.

오늘은 여기까지 입니다. 그럼 작업하시면서 경험 하신 소감이나 총 소요된 시간을 댓글로 남겨 주시면 다른분들께도 참고가 되겠습니다.

좋은 하루 되세요.

아마죤 에코 설치하기 (SenseHAT 필요)

posted Apr 3, 2018, 10:14 AM by Sundew Shin   [ updated Apr 15, 2018, 4:24 AM ]


(이미지 출처: lifehacker.com)

오늘은 다커 컨테이너화 시킨 AI Pi (인공지능 파이) 공개 프로젝트를 플렛을 이용해 가지고 있는 RPi에 설치 하는 방법을 알아 보겠습니다.
플렛 사용을 원하지 않으시는 분은 아래 첨부된 유튜브 비디오 전체 과정을 따라 설치하시면 됩니다.

준비물

  • 플렛 v0.1.1 이상
  • 아마죤 개발자 사용자 계정 (무료)
  • Sense HAT: 듣기/말하기 상태 표시, 음성입력용 버튼 사용
  • 스피커: 3.5mm 오디오 잭으로 연결
  • USB 마이크, 또는, 마이크 입력이 있는 USB 웹캠

설치

0. 먼저 다음 동영상을 시청 해 주세요.
사용방법 및 초기설정에 필요한 Alexa 개발자 정보를 얻는 방법이 나옵니다. (5분15초)

1. 'AI Pi' 템플릿을 선택 합니다.



2. 다음과 같이 앞서 생성한 alexa앱 설정 정보를 넣으시고 'Create' 버튼을 눌러주세요.
(처음 설치시 약 300MB 파일을 다운로드 받는 만큼의 시간이 소요 됩니다.)



3. 컨테이너가 만들어 졌으면 웹브라우져에서 주소, http://[RPi IP]:5000 를 입력하시면 다음과 같이 아마죤 사이트로 이동하게 됩니다. 개발자 계정으로 로그인을 완료 합니다.



4. 다음 화면에서 'Success:..' 메시지가 보이고 마이크에서 'Hello' 목소리가 들리면 설치가 완료 되었습니다.
처음에 놀라지 마세요. 사실 안놀라기가 쉽지 않습니다.

자, 이제 웹브라우져는 닫으시고 앞서 봤던 동영상대로 SenseHAT의 죠이스틱버튼을 눌러 알렉사를 만나보세요.
제가 좋아하는 입력문은 다음입니다:

"Can you sing a song for me?"

좋은 하루 되세요.

P.S: 시작에서 성공까지 총 소요된 시간을 댓글로 남겨 주시면 참고가 되겠습니다.

자주 묻는 질문들

  1. 영어만 되나요?
    -> 네. 아직은 그렇습니다.

  2. 날씨나 로컬(레스토랑) 정보를 물으면 시애틀 것을 알려줍니다. 제가 사는 곳으로 설정을 바꿀 수 없나요?
    -> 네. 아직 위치 수정이 불가능합니다. 대신 'weather in 서울?' 이런 식으로 묻습니다. 

  3. 음성명령을 통해 GPIO 신호 출력 등을 시킬 수 있나요?
    -> alexa의 모든 연산이 클라우드에서 이뤄지는 만큼 로컬의 RPi 리소스를 조작하는 것은 아직 불가능합니다.

  4. Sense HAT 없이 만들 수 있을까요?
    -> 네. 수정하면 가능합니다. 1) AlexaPi 프로젝트를 참고 해서 소스를 수정하시고 2) 탬플릿을 통한 컨테이너 생성시 디바이스 링크를 변경 해 주시면 됩니다. 즉, Sense HAT이 사용하는 /dev/i2c-1, /dev/fb1, 두 장치는 더이상 필요하지 않고, 보통 GPIO를 사용 하므로 /dev/gpiomem 장치를 추가 합니다.

  5. 호스트(RPi)에서 다른 프로그램으로 스피커나 마이크를 사용하고 있을 때도 동작하나요?
    -> 네. 충돌 없이 같이 잘 동작합니다. 참고로 AI Pi 컨테이너 안에서 호스트 장치로의 접근 권한은 mrw (mknode, read, write)입니다.

  6. 응답이 늦어서 다시 버튼을 누르다 보면 답변이 안나오다가 상태가 'Stopped'로 바뀌고 동작을 안합니다.
    -> Sense HAT의 디스플레이(LED matrix)에 물음표('?')가 표시 되면 입력된 이전 음성입력에 답변 할 것을 cloud에서 찾고 있다는 의미이고 답변이 나오는 중간에는 느낌표 ('!')가 표시되는데, 둘다 기다려줘야 하는 시간으로, 이런 중에 또 버튼을 누르면 프로그램이 비정상 동작 하게 됩니다. 원python프로그램의 버그이거나 alexa의 버그로 보여 집니다. 이럴때는 'Container'메뉴로 가서 다시 'Start'를 하던지, 아니면 호스트(RPi)에 부하가 너무 많이 걸리는지 확인하고 해결 합니다.

  7. 소리가 너무 작습니다 or 큽니다.
    -> 호스트 (RPi)나 컨테이너 명령줄에서 다음을 입력 합니다. 퍼센트값은 0~100 사이 값입니다.
    sudo amixer set PCM 0 100%

설치 문제해결

  1. 'linux runtime spec devices: error gathering device information while adding custom device "/dev/i2c-1": lstat /dev/i2c-1: no such file or directory'
    -> Sense HAT을 위한 i2c장치 활성화가 (enable)이 되어 있지 않습니다. 'sudo raspi-config'에 '5. Interfacing Option' > 'P5 I2C' > 'Would you like the ARM I2C interface to be enabled?' > '<Yes>'를 선택 합니다.


  2. 'Conflict. The container name "/alexa" (예) is already in use by container'
    -> 이전 컨테이너 생성작업의 결과물이 그래로 남아서 생긴 문제입니다. 컨테이너 이름을 다른 것으로 바꾸거나 아니면 'Containers' 메뉴에서 해당 이름의 컨테이너를 삭제하고 다시 시도 합니다.

1-10 of 16