2015. 9. 22.

NVIDIA GPU Technology Conference (GTC) - 나이트리컨벤션


   오늘 한국 최초로 NVIDIA에서 GPU Technology Conference를 열었다. 종각역 근처의 나인트리컨벤션에서 개최된 이 행사는 NVIDIA의 GPU를 이용한 많은 응용과 기술들에 대한 콘퍼런스였다. 지인들과 함께 사전등록을 하고 방문을 하였다. 그곳에서는 GE, HP, NAVER 등 다른 업체들도 미니부스를 운영하고 있었다.



1. 미니부스


<GE Intelligent Platforms 미니 부스>

<GE 에서 만든 보드>
GE Intelligent Platforms 미니 부스에서는 NVIDIA에서 하드웨어를 제공 받아 만든 임베디드용 보드가 있었다. 
-40 ~ +70 ºC 에서도 견디며 크기는 작지만 성능은 굉장한 보드라고 하며 여기에 안드로이드를 포팅하여 전시하고 있었다. 
군사용으로도 쓰인다고 한다.


<NVIDIA 그래픽카드를 이용한 3D 모델>


< 실시간으로 계산하여 모니터에 출력하는 연기모양의 형상>



2. 기조 연설


<일찍 가서 사진상 아직 사람이 많지 않지만 이날 총 2000여명이 오셨다.>


<이용덕 한국 지사장 환영사>


<NVIDIA 솔루션 아키텍쳐 및 엔지니어링 부사장>
한국 지사장님의 환영사 후에는 외국 부사장님의 기조연설이 있었는데, 
물론 저번 GE Innovation Forum 2015 처럼 동시통역 서비스가 제공 되었다. 
간단하게 GPU 시장의 중요성과 그 파급효과에 대해 들을 수 있었다.

<KAIST 권인소 교수>
다음으로는 KAIST의 권인소 교수님이 로봇 '휴보'에 대해 설명을 했다.
어떤식으로 대회가 진행되었고 또 어떻게 준비를 했는지 그 과정과 결과에 대해 알 수 있었다.
그 이후에 다음소프트 송길영 CTO의 기조연설도 있었으나 촬영이 금지되었다. 


3. 점심 식사


<제공된 도시락>
먼저 선착순으로 도착한 사람에게는 위의 도시락을, 나머지 선착순 인원은 옥토버훼스트에서 식사를 했다. ( 정말 맛있음... )


4. Deep Learning

  점심식사 후에는 여러 섹션으로 나뉘어져서 각 시간마다 준비된 발표를 들을 수 있었는데 나는 애초에 딥러닝 때문에 참여를 한 것이기 때문에 계속해서 딥러닝만 들었다. 그 중에 기억에 남는 것이 2개 있었다. 하나는 의료진단이고 또 다른 하나는 음성 인식이었다.


1. 의료 진단


<위 3줄은 놔둬도 되는 종양, 아래는 유방암으로 발전 가능한 종양이다.  눈으로구분이 가능한가?>
유방암이나 결핵 검사를 위해 X-ray 혹은 채취한 세포 조직 등을 직접 사람이 보고 눈으로 판단해야 했던 부분을 
딥러닝을 통해 컴퓨터가 찾아내는 기술이다.


<종양의 심지어 위치도 알려준다.>
딥러닝을 이런 의료진단에 사용하는 이유는 기본적으로 의사에 의한 오진률을 최소화 하자는게 그 목적이다. 
물론 위험하지도 않은데 위험할 수 있다고 표현을 한다면 불필요한 검사를 해야하기 때문에 
사용자가 싫어할 수 있다는 변수까지 고려한다고 한다.
앞으로는 컴퓨터나 로봇이 대신 진단하는 것이 더 안전한 시대가 올지도 모르겠다.
이미 무인자동차의 경우 가까운 미래에 '사람이 운전하는 것이 불법인 시대'가 온다고 하는 말도 있다.


2. 음성 인식


<언어 인식과 이미지 인식을 함께.>
음성 인식에도 딥러닝이 사용된다. 물론 들은 언어를 쪼개서 단어와 단어간의 의미를 파악하고 
그들간의 관계를 넘어 내포된 의미까지 파악한다. 위 사진은 문장에서 단어를 인식할 때 실제로 이미지에서도 
그 단어가 의미하는 곳을 중점적으로 컴퓨터가 본다는 것을 보여준다.


<과거의 기억을 토대로 유추를 한다.>
잘은 모르겠지만 인간의 기억과 같이 근접한 과거에 대해 영향을 받아 입력된 단어를 기억속에서 그 의미를 유추해 낸다고 한다.
딥러닝이 음성인식에 활용되고 있다는 것은 머지않아 지금처럼 답답한 음성인식이 아니라 정말 정확하게 내가 말하는 의미를 파악하고 그에 맞는 결론을 도출해내주는 것들이 나올 가능성이 아주 높다는 것을 의미한다.


<직접 해볼 수 있다. http://deeplearner.fz-qqq.net/>
어떤 문장에서 단어를 인식하는 과정에서 그 단어의 '벡터화'가 필요하다고 하다.
쉽게말하자면 특징을 잡아내는 것이라고 생각하면 된다.
위 사이트를 들어가면 딥러닝을 체험해볼 수 있다. (체험형 같은 것이라 그런지 안되는 조합도 있다.)
3가지의 단어를 입력하면 그들의 공통된 특징을 출력하거나 그와 관련된 특징을 출력해낸다.


<기념품>
기념품이다. 선착순 200명에게 주는 스마트 충전usb와 기본 기념품인 노트북가방을 받았다.
둘다 정말 필요했는데!



  이번 컨퍼런스도 정말 많이 배우고 얻은게 많은 자리였다. 기술적인 것 뿐만아니라 좋은 연설들과 어떤 행사를 진행하는 과정도 배울 수 있었다. 앞으로 전시회도 많이 남아있는데 나머지도 모두 시간을 내어 꼭 참가하고 싶다.





감시카메라를 만들어보자(Let's make a cctv using a raspberry pi) - 2

  자, 저번에는 vnc서버를 이용해서 라즈베리파이에 원격 접속하는 것을 했다.
이번에는 cctv를 만들기에 앞서 무선랜을 설정하는 방법을 먼저 설명하겠다. 무선랜을 설정하기 위해서는 무선랜카드가 있어야한다.
 Well, the last time, we connected with RPi2 using a VNC server.
This time, before make a cctv, I explain how to use a wlan. We need a wlan card to use a wlan.


1. 무선랜 설정 (wlan setting)


  
1. lsusb 명령어를 이용하여 무선랜카드가 인식되는지 확인한다.
1. Input a lsusb command to check a wlan card has been recongized.

2. iwconfig 명령어를 이용하여 wlan이 잡히는지 확인한다. 처음에는 아무것도 연결되지 않았을 것이다.
2. Input a iwconfig command to check wlan has been detected. Maybe at first, there is no wlan.

3. iwlist 를 이용하여 주변 공유기를 검색한다. 이때 원하는 공유기의 SSID(ESSID) 와 IP주소(Address)를 기억해둔다.
3. Input iwlist command to find wlan signal. And remember your SSID and IP address.

4. /etc/wpa_supplicant/wpa_supplicant.conf 에 아래를 vi 등을 이용하여 추가한다.
4. Add the following lines by using the vi editor or any editor in /etc/wpa_supplicant/wpa_supplicant.conf

network={                
    ssid="SSID"                
    psk="PASSWARD"
}

cs

  물론 이렇게만 해놓으면 누가 라즈베리파이를 뒤져서 공유기 비밀번호를 알아낼 수 있다.
설마 그것이 꺼림칙하다면 인터넷에 암호화 하는 방법이 있으니 참고하시길.
 Of course, it can easy to be found by someone.
If you want to further strengthen security, just find on the internet how to do that.


5. 이제 라즈베리파이를 껏다 켜도 자동으로 무선랜이 연결되도록 하자. 아래의 명령어를 입력하자.
5. Now, let's make RPi2 that automatically connect with wlan even it was rebooted. Input the following lines.

cd /etc/ifplugd/action.d/
sudo mv ifupdown ifupdown.original
sudo cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
sudo reboot
cs


6. 이제 vnc로 무선랜을 통해 라즈베리파이에 접속하려면 할당된 라즈베리파이의 무선랜 IP주소를 이용해 접속하면 된다.
6. Now, if you want connect RPi2 using wlan then just use an wlan IP address.


이제 무선랜으로 원격접속이 가능하니 거리의 제약이 많이 없어졌다! 야호!

Now we can access to RPi with wlan. So there are not much a constraint for distance! Yay!


2. cctv 코드(code)


1. Basic code


#import
import os
import RPi.GPIO as GPIO
import datetime
import time
#set GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN)
#program start
print "Start!!"
#check a door is opened
try:
    while True:
        timeNow = datetime.datetime.now() #set timeNow value
        if GPIO.input(18== 1#if a door is opened, activate below
            print "\n-------------------------------------------------------------------"
            print "Door is opened!! - Taking a picture!!!!!"
            print timeNow #print timeNow value
            print "-------------------------------------------------------------------\n"
            os.system("raspistill -t 500 -vf -hf -o /home/pi/Desktop/images/$(date +\"%Y-%m-%d_%T\").jpg -w 960 -h 720") #taking a picture
        if GPIO.input(18== 0#if a door is not opened, activate below
                print "Door is closed..."
        time.sleep(1) #delay 1s
except KeyboardInterrupt:      
    GPIO.cleanup()
cs

  간단히 설명하자면 1초마다 문이 열렸는지 확인을 하다가 문이 열리면 외부명령어를 실행하는 os.system을 이용하여 사진을 찍는다.
이때 raspistill이라는 명령어로 사진을 찍게 되는데 몇가지 옵션이 있다.
  To explain briefly, This code just check 'the door is opened?' in every 1s. Then if the door is opened, use an external command 'os.system' to take a picture.
At that time, we used raspistill. And here is some option for raspistill.


1. -t 500 : 500ms 후에 찍는다
2. -vf : 수직반전
3. -hf : 수평반전
4. -o /home/pi/Desktop/images/$(date +\%Y-%m-%d_%T\").jpg  : /home/pi/Desktop/images 경로에 찍는 순간의 '년, 월, 일, 시간' 을 이름으로 하는 .jpg 확장자를 가진 이미지를 저장
5. -w 960 : 사진 폭
6. -h 720 : 사진 높이

1. -t 500 : take a picture after 500ms 
2. -vf : Vertical reverse
3. -hf : Horizontal reverse
4. -o /home/pi/Desktop/images/$(date +\%Y-%m-%d_%T\").jpg  : Save a '.jpg' picture file that name is 'Year, Month, Day, Time' at that moment. And the path is /home/pi/Desktop/images
5. -w 960 : Width of picture
6. -h 720 : Height of picture


2. With SMS code


-*- coding: utf8 -*-
"""
Copyright (C) 2008-2014 NURIGO
http://www.coolsms.co.kr
"""
#import
import os
import RPi.GPIO as GPIO
import datetime
import time
import sys
sys.path.append("..")
import coolsms
#Set GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN)
#Define sms method
def sms():
    api_key = 'INSURT YOUR API_KEY'
    api_secret = 'INSURT YOUR API_SECRET'
    to = 'INSERT NUMBER'
    sender = 'INSERT NUMBER'
    message = 'INSERT MESSAGE'
    cool = coolsms.rest(api_key, api_secret)
        status = cool.send(to,message,sender)
        print status
    
    return None
#Start program
print "Start!!"
#Set flag for sending sms
flag = True
#Check a door is opened
try:
    while True:
        timeNow = datetime.datetime.now() #set timeNow value
        if GPIO.input(18== 1#if a door is open, activate below
            print "\n-------------------------------------------------------------------"
            print "Door is opened!! - Taking a picture!!!!!"
            print timeNow #print timeNow value
            print "-------------------------------------------------------------------\n"
            os.system("raspistill -t 500 -vf -hf -o /home/pi/Desktop/images/$(date +\"%Y-%m-%d_%T\").jpg -w 960 -h 720") #taking a picture
            #sending sms once
            if flag is True:
                sms() 
                    flag = False
        if GPIO.input(18== 0#if door is not opened, activate below
                print "Door is closed..."
        time.sleep(1) #delay 1s
except KeyboardInterrupt:      
    GPIO.cleanup()
cs


  sms코드는 문이 열렸을 때 sms를 지정된 번호로 보내는 코드를 추가하였다. 이 서비스를 이용하려면 coolsms 홈페이지에서 제공하는 coolsms.py를 다운로드 받아서 cctv 코드와 가은 경로에 저장되어 있어야 한다. 서비스는 유료이며 회원가입시 기본금을 공짜로 준다. 연습삼아 쓰기에는 충분한 양을 준다.
 다른 방법으로는 웹사이트를 만들어서 실시간으로 확인하게 할 수 있으나 자취방의 공유기 설정을 바꿔야하기 때문에 포기했다..
 This sms code is just sending a sms to user when the door is opened. If you want this service, you have to download a coolsms.py file on coolsms homepage and save it in the same path with cctv code. This service is not free. But you can get a basic amount when you sign up. And that is enough for practice.
 Alternatively, it may be checked in real-time by creating a website. But I can not change my building's router port settings. So I just gave up..



3. 도어센서 설치 (Install a door sensor)


<라즈베리파이와 라즈베리카메라>
<A RPi2 and a RPi camera>


<도어센서>
<A door sensor>


<일단 전기테이프로 부착했다.>
<As a temporary solution, I just attached with electrical tape.>


<선 정리. 도와준 현수, 민수에게 감사를.>
<Clean lines. Thanks for hsjoe's and minsoo's help.>


<데모 영상>
<Demonstration video>


<문 열기 전 찍은 모습>
<A picture before the door is opened.>


<문을 열고 나서 자동으로 찍힌 모습>
<A picture after the door is opened.>


 이제 무선으로 원격접속이 가능하니 나중에 시간이 나면 문 앞쪽에 라즈베리파이를 설치해야 겠다.
 Now, I can wireless remote access to RPi so if I have a time, I will reinstall a RPi in front of the door.


참조(References)

-coolsms 홈페이지

-coolsms.py 다운로드 링크