레이블이 Qt인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Qt인 게시물을 표시합니다. 모든 게시물 표시

2017년 8월 20일 일요일

jetson tx2 board - face detect - face verification - hand gesture classification

 skt - nvidia 에서 진행한 t 해커톤에 참가했었습니다. 주제는 jetson tx2 board를 이용한 AI 제품 개발이 었고, 2017 8/26,27 무박 2일로 진행했습니다. 하루만에 시제품을 만들어내느라 엄청난 몰입을 했고, 좋은 팀원들과 협업도 해서 재미있는 경험이었습니다. (끝나고 나서는 엄청난 피로가 몰려왔지만ㅜ)

 jetson에 face detect, face verification 과 hand gesture classification으로 password 입력, face classification 해서 인물에 따라 안내 SMS 를 보내는 기능 등을 개발 했습니다.

 deep learning frame work는 caffe 를 사용했고, 메인 code는 qt에서 c++로 작성했습니다. source code는 여기 (https://github.com/ttagu99/dguardian) 에 있습니다.
  training도 caffe 이긴 한데 제가 bvlc 에서 fork해서 몇몇 기능을 추가한 거라, 이번에 사용한 train_val.prototxt는 bvlc caffe에서는 바로 안돌아 갑니다. 제 caffe code는 여기(https://github.com/ttagu99/caffe/tree/caffe_nccl)에 있습니다.

 아래 동영상은 집주인인 저의 얼굴을 인식, 인증하고, 제 Password인 손동작을 인식해서 문이 열리는 것입니다.





 아래 동영상은 집주인이 누군가와 같이 와서 Password를 보여주면 안되니 경고를 띄워주는 것과, 강도에게 협박 당해서 문을 열어야 할 경우 문은 열어 주되, 내부적으로 경찰에 신고 하는 겁니다. (지금은 진짜 경찰에 신고는 아니고 ㅎ, 제 핸드폰으로 문자를 보내는걸로 구현했습니다.)



 아래 동영상은 미리 등록된 범죄자의 얼굴을 인식해서, 집앞에 나타날 경우 경찰에 신고하는 동영상입니다. (이것도 물론 제 전화로 문자만)




 아래 동영상은 미리 등록된 택배기사님의 얼굴을 인식하고, 물건을 맡길 것을 안내하고, 집주인에게는 택배가 도착했다고 안내 SMS를 보내주는 시나리오입니다.





 아래 동영상은 외부인이 밖에 있을 경우, 집에서 나가려고 할때 밖에 누군가 있다고 알려주고, 문을 열지 물어봤을때 거절을 하는 시나리오입니다.




 아래 동영상은 외부인이 밖에 있을 경우, 집에서 나가려고 할때 밖에 누군가 있다고 알려주고, 문을 열지 물어봤을때 승락을 하는 시나리오입니다.






2015년 7월 27일 월요일

vs2015에서 qt 사용

 vs2015가 나와서 현재 진행중인 Project를 한번 로딩해보니 아래와 같은에러가 났다.
MSC_VER : MSC컴파일러의 VER이 맞지 않는다고 나는거 같은데 현재(2015/07/27) QT 홈페이지에 가보면 MSVC2013 까지만 만들어져있다. vs2015 지원하는거는 개발자 이슈트래킹에 올라가있는것으로 봐서 조만간 나올거 같지만, 아직은 없음으로 나중에 2015를 써봐야겠다.
---------------------------------------------------------------------------------------
Error LNK2038 mismatch detected for '_MSC_VER': value '1800' doesn't match value '1900' in moc_imagelab.obj imagelab \imagelab\qtmaind.lib(qtmain_win.obj) 1

2015년 7월 23일 목요일

QString, CString, std::string, cv::String, char*, char 배열, int, float, double 문자열 변환

 문자열 관련해서 주로 std::string하고 char* 를 쓰지만, mfc에서는 CString을 안쓸 수 없고, 요즘 Qt를 해보니 QString을 안쓸 수 없다.


cv::String은 Opencv를 쓰면서 std::string을 대입하면 변환되기에 특별히 신경쓸 필요가 없다.

  1. QString qstring;
  2. string stdstring;
  3. //QString ----> std::string
  4. stdstring = qstring.toStdString();
  5. //std::string -----> QString
  6. qstring.fromStdString(stdstring);
  7. //int, double, float -------> std::string
  8. int nNewImgCnt = 0
  9. string str = "imagelab" + to_string(nNewImgCnt) + ".bmp";
  10. //std::string -----> int
  11. string str2 = "233";
  12. int n = stoi(str2);
  13. //std::string -----> double,float
  14. string str3 = "233.2321";
  15. float f = stof(str3);
  16. double d = stod(str3);








2015년 7월 3일 금요일

Qt 시작하기2 with Visual studio and Opencv

 개발 환경 : visual studio2013, qt5.4, opencv 3.0
1. 아래처럼 새프로젝트 만들기를 클릭하고 Qt5 Project를 생성한다.
 일단 sample test임으로 선택사항은 변경없이 finish


2. 프로젝트 생성후 탐색기를 보면 아래와 같이 파일들이 생겨있다.
이중 *.ui 파일을 클릭 해보면


3. qt designer 가 실행되고 dialog가 보인다.
여기에 버튼하나와 label 하나를 추가했다.

4. 아래 그림처럼 시그널/슬롯 편집버튼을 클릭하여 버튼과 다이얼로그를 연결한다.
그후에 연결설정을 클릭하여 slot에 새로운 함수(여기서는 LoadImage)를 넣는다.
5. 헤더(여기서는 qttest5.h) 파일을 열어 함수를 선언한다.
 수정부분은 검은색 표시부분




  • #ifndef QTTEST5_H
  • #define QTTEST5_H
  • #include <QtWidgets/QMainWindow>
  • #include "ui_qttest5.h"
  • class qtTest5 : public QMainWindow
  • {
  •     Q_OBJECT
  • public:
  •     qtTest5(QWidget *parent = 0);
  •     ~qtTest5();
  • private:
  •     Ui::qtTest5Class ui;
  •      private slots:
  •      void LoadImage();
  • };
  • #endif // QTTEST5_H

  • 6. cpp(여기서는 qttest5.cpp) 파일을 열어 함수를 선언한다.
     수정부분은 검은색 표시부분





  • #include "qttest5.h"
  •  #include "opencv2/opencv.hpp"
  •  using namespace cv;
  • qtTest5::qtTest5(QWidget *parent)
  •     : QMainWindow(parent)
  • {
  •     ui.setupUi(this);
  • }
  • qtTest5::~qtTest5()
  • {
  • }
  •  void qtTest5::LoadImage()
  •  {
  •      VideoCapture cap(0);
  •      Mat img;
  •      cap >> img;
  •      QImage qimg(img.data,    img.cols, img.rows, QImage::Format_RGB888);
  •      ui.label->setPixmap(QPixmap::fromImage(qimg));
  •  }

  • 컴파일 후 실행해보면 아래처럼, ui에 webcam으로 찍은 image가 display된다.




     참고사항 : opencv 빌드시 with qt를 해주어야 한다.
    현재(2015/07/09) 기준으로 opencv 3.0 을 다운로드 후 cmake로 열면 default는 with qt항목이 체크해제 되어있다. 체크 후 빌드가 필요하다. 그리고 qt 경로도 자동으로 찾지 못하였다. 아래 그림처럼 qt 경로들을 찾은후 입력 해주고 Generate를 한 후 다시 빌드해야한다.

    Qt 로 만든 릴리즈 .exe 파일에 포함할 dll

     당연한 이야기 이지만 Qt 로 만든 프로그램 배포시 정적으로 빌드하지 않았다면, dll들이 따라 다녀야 한다. 일단 설치프로그램을 이용한 배포를 만들 단계는 아니여서 필요한 dll들을 .exe 파일폴더에 같이 넣어서 배포하여 실행여부 check를 하였다.



     dll이 포함되어 있지않으면 위와 같은 에러들이 발견된다. 하나씩 찾아서 추가할 수는 없음으로 디펜던시 워커를 이용해서 필요한 dll들을 폴더 안에 넣었다.
    필요한 dll들은 아래와 같았다.

    개발한 프로그램 환경(vs2013, qt, window x86 릴리즈버전)

    - 개발한 릴리즈모드 프로그램.exe
    - icudt53.dll
    - icuin53.dll
    - icuuc53.dll
    - Qt5Core.dll
    - Qt5Gui.dll
    - Qt5Widgets.dll

    이렇게 해서 실행해보면.
    not find or load platform plugin "windows" 라는 메세지가 뜬다.


    추가로 필요한 것이 qt directory안에 plugin\platforms\ 안에 qwindows.dll 이다.
    qwindows.dll을 그대로 넣으면 않되고 platforms 폴더 통째로 넣어야한다.
    아래처럼 넣어놓고 실행해보면

    qt 및 visual studio 가 설치되지 않은 곳에서 정상 실행된다.


    2015년 6월 29일 월요일

    Qt 시작하기 with visual studio 2013

     좀 늦은 감이 있지만 크로스 컴파일이 필요한 프로젝트가 있어 Qt를 써보기로 했다. 요즘에는 IDE를 vs2013에서 지원하고 있으니, 익숙한 IDE에서 Qt의 클래스만 좀 배우면 될거 같다.

    1. 설치하기
     : 웹상에 설치하는 방법이 많이 나와있는데, online 설치는 하다가 성격 급해서 포기했다. 밤에 자고 일어 났는데, 아직도 설치 중이라는.
     : Offline 설치파일을 다운로드 받아서 설치하는게 훨씬 낳다. 다운로드하는데 약 20분정도 소요됬고 설치하는데 몇분이면 된다.
     :  공식다운로드 경로  https://www.qt.io/download-open-source/
     : 아래의 큼지막한 다운로드 버튼은 온라인 설치파일인데 그거말고 아래것을 눌러 보면 offline 설치파일이 있다.


































    : 들어가보면 여러 설치파일들이 있는데 운영체제에 맞는 SDK 를 다운받는다.
      나는 window 64를 받았다.



    : Qt Creator는 필요없다. Window Host를 설치파일에 포함되어있었다. 
    : 그리고 아래 visual studio add in 설치파일을 다운 받는다.


     : 그리고 설치 한다. 순서는 상관없겠지만, 난 SDK 설치후 ADD IN 설치했다.

    2. 잘 설치되었는지 Visual Studio를 열어본다.
     : 아래처럼 qt5가 메뉴가 보인다면 잘된것이다.


    3. Qt Options를 클릭하여 설치된 Qt 경로를 넣어준다.

















    4. dll 파일이 들어있는 경로를 환경변수 path 에 추가해준다.
     : default 설치를 했다면 C:\Qt\Qt5.4.2\5.4\msvc2013_64\bin  로 되었다.

    5. 그리고 Example 파일을 실행해본다.
     : 아래처럼 실행이 잘된다.



































    : 그리고 아래처럼 디버깅도 잘된다. qt creator 로 디버깅하는것도 괜찮지만, 그래도 익숙한 visual studio라. 이걸 쓰기로 했다.

































      아래처럼 환경변수 확인해보고 추가 안되어있으면 추가해주어야 한다.