취미/행사2019. 8. 4. 16:58

 

 

Rayark Fan Meeting을 갔다왔습니다.

 

점심 식사도 준비하고 내부도 아늑하게 잘 만들었습니다.

 

처음 경험해보는 자리고 많이 기대하고 갔습니다. 결과적으로 즐거운 기분으로 집으로 왔네요.

 

레이야크는 Deemo 모바일 리듬게임을 접하면서 꾸준히 좋아해오던 회사입니다. 그들이 만들어오던 아기자기한 캐릭터와 음악을 특히 좋아합니다. 앞으로도 한국에서 많은 행사를 진행했으면 합니다.

 

 

'취미 > 행사' 카테고리의 다른 글

DEEMO 테마 전시회 [After Alice, Before Deemo] 11/9  (0) 2019.11.05
Animenz Live 2019 Seoul 8/4  (0) 2019.08.04
코믹콘(comic con) 8/2  (0) 2019.08.04
Posted by richcherry
홈페이지2019. 8. 4. 12:41

 

안녕하세요 상명대학교 천안캠퍼스 컴퓨터공학과 4학년 최남기 입니다.

 

제가 생활하는 자취를 남기기 위해서 개인 블로그를 만들었습니다.

 

그동안 해왔던 프로젝트와 과제물과 취미 생활을 포스팅하는 곳입니다.

 

Email  : uyom589@gmail.com

 

 

 

Posted by richcherry
다녀온곳2019. 7. 6. 21:41

https://tykimos.github.io/2019/07/04/ISS_2nd_Deep_Learning_Conference_All_Together/

 

2nd 함께하는 딥러닝 컨퍼런스(2nd DLCAT)

딥러닝을 시작하는 이유는 달라도 딥러닝을 계속 하는 이유 중 하나는 바로 ‘함께하는 즐거움’이지 않을까합니다. 작년 6월 말 대전에서 “1st 함께하는 딥러닝 컨퍼런스”에 400명 넘게 모여 즐겁게 인공지능 및 딥러닝 관한 다양한 주제로 톡을 나누었습니다. 그간 매일 논문만 읽어도 못 따라갈 만큼 새로운 연구가 쏟아지고 있고, 그 활용 사례 및 관심 또한 각 분야에 퍼져가고 있습니다. 대전은 전국 각지에서 오시기에 접근성이 용이하고, 정부출연연구원 및 정

tykimos.github.io

연구실 친구들과 같이 갔다왔습니다.

도움이 되는 강의도 있었고, 너무 어려워서 이해하지 못한 강의도 있었습니다.

참가한 노력이 아깝지 않은 시간이었습니다.

Posted by richcherry
캡스톤_졸업작품2019. 6. 22. 00:14

저희가 최종적으로 만든 코드 주소입니다. https://github.com/choinamki/plant_anomaly_detection_dji_spark_drone

 

choinamki/plant_anomaly_detection_dji_spark_drone

Contribute to choinamki/plant_anomaly_detection_dji_spark_drone development by creating an account on GitHub.

github.com

 

DJI media tutorial 코드를 참조했습니다.

https://developer.dji.com/mobile-sdk/documentation/android-tutorials/MediaManagerDemo.html

 

Creating a Media Manager Application - DJI Mobile SDK Documentation

If you come across any mistakes or bugs in this tutorial, please let us know by sending emails to dev@dji.com. Please feel free to send us Github pull request and help us fix any issues. In this tutorial, you will learn how to use the MediaManager to inter

developer.dji.com

윗 코드에서 필요없는 부분을 제거하고 파일을 전송하는 코드를 만들었습니다.

MediamanagerActivity 에서 여러가지 드론에 있는 파일을 관리할 수 있습니다.

MediamanagerActivity
socekt_setting

settingsoket 을 눌러서 아이피와 포트를 입력한 뒤 sendcompuetr 를 누르면 드론이 촬영한 영상과 gps데이터 텍스트파일을 설정한 서버에 보내도록 만들었습니다.

 

해당하는 tcp 소켓 코드는 해당 게시글을 통해 확인할 수 있습니다.

https://namki-learning.tistory.com/23?category=687501

 

안드로이드 java 서버컴퓨터 python tcp 통신

이정민 팀원과 같이 만들었습니다.https://jeongmin-lee.tistory.com/63 ⑦ TCP 통신 TCP 통신 Server는 Python으로 Client는 JAVA로 작성합니다. TCP통신 Client_JAVA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17..

namki-learning.tistory.com

서버소켓설정은 따로 만든 뒤 intent 를 통해 popup_textActivity 로 이동하고 입력받았습니다.

 

popup_textActivity
intent 를 통해 이동
intent 가 넘어왔을 때 조건

이렇게 해서 드론의 영상데이터와 gps데이터를 서버 컴퓨터로 보낼 수 있었습니다.

Posted by richcherry
캡스톤_졸업작품2019. 6. 21. 21:47

저희가 최종적으로 만든 코드 주소입니다. https://github.com/choinamki/plant_anomaly_detection_dji_spark_drone

 

choinamki/plant_anomaly_detection_dji_spark_drone

Contribute to choinamki/plant_anomaly_detection_dji_spark_drone development by creating an account on GitHub.

github.com

DJI 에 올라와있는 tutorial code 두가지를 참조했습니다.

https://developer.dji.com/mobile-sdk/documentation/android-tutorials/SimulatorDemo.html

 

DJI Simulator Tutorial - DJI Mobile SDK Documentation

If you come across any mistakes or bugs in this tutorial, please let us know by sending emails to dev@dji.com. Please feel free to send us Github pull request and help us fix any issues. In this tutorial, you will learn how to use the DJISimulator in your

developer.dji.com

https://developer.dji.com/mobile-sdk/documentation/android-tutorials/index.html

 

Creating a Camera Application - DJI Mobile SDK Documentation

If you come across any mistakes or bugs in this tutorial, please let us know using a Github issue or a post on the DJI forum. Please feel free to send us Github pull request and help us fix any issues. This tutorial is designed for you to gain a basic unde

developer.dji.com

첫 번째 링크에서 조이스틱 코드와 움직임 제어코드를 가져오고 두 번재 링크에서는 카메라 스트림과 동영상 촬영 기능을 가져와서 쓸데 없는 부분을 제외하고 두 코드를 합쳤습니다.

전체 클래스 사진입니다. 드론 동작제어와 카메라 영상을 위해서 사용되는 클래스는 총8개입니다.

ConnectionActivity 를 통해 DJI spark 와 연결하도록 하고 BaseProduct 클래스를 상속받은 변수를 선언하여 제품 sdk 인증을 한 뒤 그것을 통해 드론을 제어하는 형식입니다.

connectionactivity class 속 baseproduct클래스

실제 화면에서 인증을 마치면 open 버튼이 활성화되는것을 볼 수 있습니다.

 

제품이 등록되고 난 뒤에는 MainActivity 를 통해서 카메라와 feed를 볼 수 있고 드론을 조종할 수도 있습니다.

MainActivirty 실행화면

github 에 올려놓은 코드를 보고서 온클릭리스너 부분에 함수를 보면 해당 기능을 하는 부분을 찾아볼 수 있습니다.

 

모든 단추는 단추를 선언하고 레이아웃의 아이디를 붙인 뒤 리스너를 붙여서 onclick 부분에서 case문으로 함수가 실행되게 만들었습니다.

 

 

 

드론의 움직임은 3가지 Pitch Roll Yaw 로 정의됩니다. 

dji 는 이 3가지 움직임에 숫자를 넣어서 움직일 수 있습니다.

조이스틱과 가중치를 곱해서 Pitch Roll Yaw 값을 만들어주고 이것을 drone 에게 업데이트 해주면 드론이 움직이게 됩니다.

조이스틱
드론 움직임 업데이트

드론의 움직임은 이륙한 곳을 기점으로 카메라가 있는 곳이 정면이 되어 움직이게 됩니다.

maxspeed 값을 바꿔주는 것으로 드론의 속도를 제어해 줄 수 있습니다.

 

카메라 feed 는 앱이 만들어질 때 드론에서 바이트단위로 영상데이터를 전송받게 됩니다.

이렇게하면 드론의 카메라 영상을 보면서 드론의 움직임을 제어할 수 있는 앱을 만들 수 있습니다.

Posted by richcherry
캡스톤_졸업작품2019. 6. 21. 18:07

저희가 최종적으로 만든 코드 주소입니다. https://github.com/choinamki/plant_anomaly_detection_dji_spark_drone

 

choinamki/plant_anomaly_detection_dji_spark_drone

Contribute to choinamki/plant_anomaly_detection_dji_spark_drone development by creating an account on GitHub.

github.com

 

2019년 캡스톤2 을 진행하면서 제가 맡은 부분은 드론 동작제어였습니다.

 

사용한 드론으로는 DJI 사에 spark 드론입니다. https://www.dji.com/kr/spark

 

DJI 스파크 – 셀피 드론 – DJI

고급 제스처 인식 제어 기능으로 조종기 없이 DJI 스파크를 날려보세요. 인텔리전트 플라이트 모드 덕분에 손쉽게 드론 셀피도 촬영할 수 있습니다. 더 자세한 정보는 DJI.com에서 확인해보세요.

www.dji.com

DJI spark drone은 mobile sdk를 지원하며 ios와 android환경에서 돌아갑니다. 저는 android 환경에서 작업했습니다.

또한 제가 작업했을 때는 sdk 가 android 9.0 을 지원하지 않았습니다.

드론의 gps 데이터를 얻거나 드론을 수동으로 움직이거나 사진촬영, 동영상촬영 등을 할 수 있습니다.

들어올릴 수 있는 무게는 저희가 실험해보니 100g정도까지 들어올릴 수 있습니다. 더 자세한 것은 youtube 검색을 해보면 해외 사용자가 테스트 해본 결과가 올라와있습니다.

 

처음에 DJI 드론 위에다가 라즈베리파이와 5v 물펌프를 달아서 특정 잡초에게 제초제를 분사하는 드론을 만들려고 했습니다. 그러나 이륙중량의 한계로 다른 방식으로 프로젝트를 진행했습니다.

 

 

https://developer.dji.com/mobile-sdk/

 

DJI Developer

Revolutionize Industries with your Game-Changing App Using the Mobile SDK, create a customized mobile app to unlock the full potential of your DJI aerial platform.

developer.dji.com

DJI drone 을 개발할려면 DJI Developer 에 가입한 뒤 앱을 등록하고 api key 를 발급받아야 합니다. 

해당 홈페이지에 가입하신 뒤 오른쪽 상단 본인 프로필 아이콘의 developer center 를 들어갑니다.

create app 버튼을 눌러 앱을 등록합니다.

 

여기서 중요한 점은 Package Name 이 우리가 만들려는 app과 일치해야합니다. 그렇지 않으면 android sdk 등록이 제대로 되지 않습니다. 저는 com.dji.Myapplication 으로 했습니다.

앱을 만들면 이메일 인증을 해야합니다. 본인이 가입했던 메일로 날아온 메일의 링크를 누르면 앱이 정상적으로 등록됩니다.

윗 사진을 볼 수 있어야 합니다.

 

이제 안드로이드 스튜디오에 dji sdk 를 설치해야합니다.

 

https://developer.dji.com/mobile-sdk/documentation/application-development-workflow/workflow-integrate.html#android-studio-project-integration

 

Integrate SDK into Application - DJI Mobile SDK Documentation

The examples below import the DJI SDK into a new iOS and Android project. The same steps can be used for integration into an existing application. Xcode Project Integration Screenshots in this section are generated using Xcode 7.3. Create a New Application

developer.dji.com

해당 주소에 android 부분을 따라서 진행하시면 됩니다.

build gradle 파일에 튜토리얼에서 제공해주는 코드를 적은 뒤 안드로이드 스튜디오에 코끼리 모양 버튼을 누르면 동기화가 진행되면서 dji sdk 가 설치됩니다.

왼쪽 위 상단에 코끼리 모양 동기화 버튼을 볼 수 있습니다.

 

그리고 윗 주소 튜토리얼을 따라가면서 manifest 부분에 api key 입력 부분에 아까 발급받은 키를 등록하고 앱을 build 하면 튜토리얼 마지막 이미지를 볼 수 있습니다.

 

DJI sdk 를 사용하기 위해서는 한 번 단말기가 인터넷과 연결되어 인증을 받아야 합니다. 그래야지 인증받은 파일이 로컬에 저장되고 다음부터 인터넷이 연결되있지 않아도 앱이 성공적으로 build 됩니다. 저는 갤럭시s10 android 9.0 을 쓰고 있기 때문에 전 핸드폰인 s7 android 8.0 을 사용했습니다. 핸드폰이 인터넷에 연결되어 있지 않았기 때문에 sdk 인증이 되지 않는 오류가 발생했었습니다.

 

이렇게하면 DJI spark 를 위한 app 을 개발할 준비가 끝납니다.

 

 

-추가적으로 적습니다.

 

혹시 내가 가지고 있는 단말기를 usb로 컴퓨터와 연결했는데 인식이 안되는 경우도 있습니다.

 

그 때는 먼저 핸드폰에 개발자옵션에 들어가서 usb디버그를 켰는지 확인합니다.

해당 옵션을 체크한 뒤 핸드폰을 연결하면 해당 pc 디버그를 허용하겠냐는 물음이 나옵니다. 확인 버튼을 누른 뒤 

그리고 tool 메뉴에 connection assistant 를 들어가서 recan usb 를 누르고 그래도 안되면 next 버튼을 눌러서 요구사항을 진행하시면 성공적으로 안드로이드 스튜디오가 핸드폰 단말기를 잡아내는 것을 볼 수 있습니다.

Posted by richcherry
사용법2019. 6. 21. 15:54

아래 방식은 테스트한지 2년이 지나서 잘 작동되는지 알 수 없습니다.

또한 ifttt가 유료화되서 3개의 무료이벤트만 사용할 수 있다고 합니다. 다른 분들의 최신 블로그를 통해서 만드시는걸 추천드립니다.

 

 

https://namki-learning.tistory.com/18?category=687499

 

구글 홈으로 컴퓨터를 제어해 보자. - wol 이용 컴퓨터 켜기

해당 동영상에서 도움을 얻었습니다. https://www.youtube.com/watch?v=PtiX4TcdDSg wol 은 해당 블로그에서 도움을 얻었습니다. http://blog.naver.com/PostView.nhn?blogId=a77ila2000&logNo=221040624446&categ..

namki-learning.tistory.com

앞선 글에 이어지는 내용입니다.

 

구글 홈을 이용하여 컴퓨터를 키는 방법을 알아봤습니다.

여기서 끝나지 않고 EventGhost 를 사용하여 컴퓨터를 제어하는 법을 알아보겠습니다.

 

침대 위에서 갑자기 전화가 와서 google home 에게 "ok google 컴퓨터 소리 꺼줘" 라고 말하던가

침대에 누웠는데 컴퓨터 모니터가 켜져있어서, 끄기 위해서 일어나면 잠에서 깨는 상황을 방지하기 위해서 만들었습니다.

 

1. 먼저 EventGhost 를 설치해줍니다.

http://eventghost.net/

 

EventGhost: Automation made simple.

New in Release 0.5 RC6 Popular Extensions

eventghost.net

컴퓨터 매크로를 활용하기 위한 프로그램입니다. join 과 EventGhost 를 이용해서 컴퓨터를 제어할려고 합니다.

저는 0.5.0 rc6  버전을 설치했습니다.

 

윈도우10 디펜터가 해당 프로그램이 설치되지 못하게 막는것을 확인했습니다. 프로그램을 예외처리 해주시던가 방화벽을 잠시 끄고 설치하신뒤에 방화벽을 올리셔야합니다.

 

2. join 설정을 설정합니다.

 

AutoRemote 플러그인을 사용해서 자기 컴퓨터에 메세지가 포스트되면 그 알람을 조건문으로 컴퓨터를 제어할려고 합니다. AutoRemote 플러그인을 사용하기 위해서는 알람을 받을 port번호를 설정해줘야합니다.

 

크롬 확장프로그램 join 아이콘을 누르신 뒤 ''' 을 눌러서 환경설정으로 들어가고 advance 를 누릅니다. 

advnace 탭에 eventghost, node-red 부분에 port 를 1818로 설정해줍니다.

 

3. AutoRemote 를 EventGhost 에 설치해줍니다.

https://joaoapps.com/autoremote/eventghost/download/

 

Download – Tasker and Join

Right-click and “Save as” the AutoRemote EventGhost plugin file to your EventGhost plugin folder, after installing EventGhost. This folder is usually C:\Program Files (x86)\EventGhost\plugins\AutoRemote\ or C:\Program Files\EventGhost\plugins\AutoRemote\.

joaoapps.com

해당 링크에서 autoremote 를 받을 수 있습니다. _init_.py 파일을 EventGhost plugins 폴더에 AutoRemote 폴더를 만든 뒤 넣어줍니다.

 

4. EventGhost 를 설정해줍니다.

 

제가 만든 eventghost 매크로 명령어들입니다. Autostart 에 AutoRemote 플러그인을 실행하게 만들어주고 autoremote 가 특정 메세지를 수신하면 매크로를 실행하게 만들어주면 됩니다.

 

저는 컴퓨터 끄기 대기모드, 소리 끄기 켜기, 모니터 끄기 켜기를 설정해줬습니다.

 

5. IFTTT 를 설정해줍니다.

 

https://joinjoaomgcd.appspot.com/

 

Join

 

joinjoaomgcd.appspot.com

윗 링크에 접속하시면 join 이 로그인되있을 경우 본인의 join을 관리할 수 있는 홈페이지로 이동할 수 있습니다.

본인 현재 컴퓨터 크롬을 선택한 뒤 join api 를 눌러서 api key show 버튼을 누릅니다. 그리고 text 부분에 본인이 원하는 명령어(예를 들어 pc_off) 을 하면 copy url to use 부분에 텍스트가 생기는 것을 볼 수 있습니다.

api 키는 타인에게 유출되면 보안문제가 생기기 때문에 조심합니다.

 

생긴 텍스트를 저번에 했던 ifttt 활용법을 보시고 

 

해당 url 부분에 복사 붙여넣기 해주시고

post 로 설정해줍니다. 

 

6.테스트해보기

 

다 설정을 해주셨으면 join 에 send an eventghost message 를 통해서 테스트해봅니다.

메세지를 보냈을 때 eventghost 에 아래 그림과 같은 로그가 찍히면 성공입니다.

저는 test_namki 를 보내서

autoremote.message.test_namki u'test_namki' 라는 로그를 볼 수 있었습니다.

 

이렇게하면 googlehom 을 통해서 여러분이 원하는 명령어로 컴퓨터를 제어할 수 있습니다.

 

보내지는 명령어는 구글드라이브에 저장되기 때문에 보안에 조심해야합니다.

 

소리를 켜고 끄는것은 제가 따로 외장사운드카드를 사용하기 때문에 eventghost 에 명령어로 제어하는 것은 오류가 발생했습니다.

그래서 따로 방법을 찾아봤고 eventghost 는 command 를 실행하는 것도 지원해줍니다. 

 

https://github.com/AndreMiras/pycaw

 

AndreMiras/pycaw

Python Core Audio Windows Library. Contribute to AndreMiras/pycaw development by creating an account on GitHub.

github.com

해당 깃허브를 참고해서  소리를 mute 하는 코드를 사용했고 command 를 사용해서 코드를 실행시키는 것을 통해 소리를 mute unmute 하는 것을 구현했습니다.

 

sound_off.py

 

sound_on.py

 

 

여기까지 evnetghost 를 통해 컴퓨터를 제어하는 것을 알아봤습니다. 이것 말고도 여러가지 재미있는 매크로를 만들 수 있을겁니다.

너무 추상적으로 적은듯 한데 잘 안되시는 분들은 댓글로 질문 부탁드립니다.

 

완성된 동영상입니다.

https://youtu.be/UHiGrARKoZw

컴퓨터 끄기

https://youtu.be/2jqIsQWLfwY

컴퓨터 소리제어

https://youtu.be/1awaTwQ_5AM

컴퓨터 모니터제어

 

Posted by richcherry
캡스톤_졸업작품2019. 6. 21. 15:02

이정민 팀원과 같이 만들었습니다.https://jeongmin-lee.tistory.com/63

 

⑦ TCP 통신

TCP 통신 Server는 Python으로 Client는 JAVA로 작성합니다. TCP통신 Client_JAVA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43..

jeongmin-lee.tistory.com

 

캡스톤2을 진행하면서 드론의 영상과 gps 데이터를 서버컴퓨터로 전송해야했습니다.

 

드론으로 dji spark 드론을 사용했습니다. spark 드론은 mobile sdk 만 지원했고 그에 맞춰서 java pthon 두 언어로 통신하는 코드를 만들었습니다.

 

 

java 를 client 로 python 을 sever 로 두고 만들었습니다.

 

server code

python 으로 만든 서버 코드입니다. 

 

소켓을 생성한 뒤 bind 부분에 ip와 포트번호를 넣어주고 listen 을 통해 몇 개의 연결을 대기시킬지 정하면 우리가 원하는 서버 소켓이 정의됩니다.

 

 

그런 다음 accept 를 하면 client에 연결 요청이 오기 전까지 대기상태가 됩니다. client 에 연결요청을 받으면 첫번째로 동영상을 받고 두번째로 gps 텍스트파일을 받습니다.

 

동영상은 용량이 커서 한번에 받을 수 없으므로 python 문법인 while else 문을 사용해서 소켓 버퍼에 데이터가 비워지는 시점까지 파일을 받습니다.

 

파일을 다 받으면 동영상을 opencv 를 통해 frame 단위로 잘라주고 dakent에 yolo 모델에 fit해서 이상이 있는 식물을 찾아냅니다.

 

client code

다음은 안드로이드 환경 java 로 짜여진 client code 입니다. 먼저 파일 통신을 하기 위해 외부저장소를 읽는 권한이 있는지 확인하고 특정 버튼을 누르면 파일통신이 진행되도록 했습니다.

 

서버 주소와 포트번호를 입력하게 만들었고 입력받은 정보를 통해 소켓을 만듭니다.

 

특정 디렉토리에 있는 파일의 리스트를 가져와서 inputstream 에 파일을 outputstream 에 서버를 연결해주고 write 를 하게 되면 파일이 보내집니다. 저 형식을 통해서 첫 번째로는 동영상 파일을 두 번째로는 드론 ps 텍스트 데이터를 전송했습니다.

 

여기서 주의할점이 catch를 통해서 사용자에게 오류가 났을 경우 toast 를 보내는 코드를 넣으면 오류가 납니다. 찾아보니까 메인쓰레드가 아닌 곳에서 toast 를 보낼 경우 오류가 나기 때문에 다른 방법을 통해서 보내야한다고 합니다. 

 

인터넷에 다른 언어들끼리 tcp통신하는 예제가 많이 보이지 않았습니다. 따라서 많은 시행착오를 거쳤습니다. 언어가 달라도 규격만 지켜주면 다른 언어와 환경에서 tcp 통신이 가능합니다.

 

Posted by richcherry