Dec 24, 2013

Raspberry Pi - OpenCV with Picam (2)


2. Make a camcv


2-1 Copy to another directory

cd

mkdir camcv

cd camcv

cp -r /opt/vc/userland/host_applications/linux/apps/raspicam/* .


2-2 Make a camcv file

raspistill change to camcv

mv raspistill.c camcv.c

If you typing command ls, you can see camcv.c file instead of raspistill.c file.


2-3 change  cmakelists.txt

sudo nano cmakelists.txt

Clear all and copy and paste this text.
-------------------------------------------------cmakelists.txt-------------------------------------------------------


  1. cmake_minimum_required(VERSION 2.8)
  2.  project(camcv)
  3.  SET(COMPILE_DEFINITIONS -Werror)
  4. include_directories(/opt/vc/userland/host_applications/linux/libs/bcm_host/include)
  5.  include_directories(/opt/vc/userland/interface/vcos)
  6.  include_directories(/opt/vc/userland)
  7.  include_directories(/opt/vc/userland/interface/vcos/pthreads)
  8.  include_directories(/opt/vc/userland/interface/vmcs_host/linux)
  9.  include_directories(/opt/vc/userland/interface/khronos/include)
  10.  include_directories(/opt/vc/userland/interface/khronos/common)
  11.  include_directories(/home/pi/camcv/)
  12.  include_directories(/home/pi/camcv/gl_scenes/)
  13.  include_directories(/home/pi/camcv/libfacerec/include/)
  14. add_executable(camcv RaspiCamControl.c RaspiCLI.c RaspiPreview.c camcv.c RaspiTex.c RaspiTexUtil.c gl_scenes/teapot.c gl_scenes/models.c gl_scenes/square.c gl_scenes/mirror.c gl_scenes/sobel.c gl_scenes/yuv.c tga.c )
  15. target_link_libraries(camcv /opt/vc/lib/libmmal_core.so /opt/vc/lib/libmmal_util.so /opt/vc/lib/libmmal_vc_client.so /opt/vc/lib/libvcos.so /opt/vc/lib/libbcm_host.so /opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so )


----------------------------------------------------------------------------------------------------------------------

ADD------------------------------------------------------------------------------------------

If you can see below error, modify target_link_libaries in cmakelists.txt!!

/usr/bin/ld: CMakeFiles/camcv.dir/camcv.c.o: undefined reference to symbol 'sem_post@@GLIBC_2.4'
//lib/arm-linux-gnueabihf/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: ld returned 1 exit status
CMakeFiles/camcv.dir/build.make:392: recipe for target 'camcv' failed
make[2]: *** [camcv] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/camcv.dir/all' failed
make[1]: *** [CMakeFiles/camcv.dir/all] Error 2
Makefile:72: recipe for target 'all' failed
make: *** [all] Error 2


  1. target_link_libraries(camcv /opt/vc/lib/libmmal_core.so /opt/vc/lib/libmmal_util.so /opt/vc/lib/libmmal_vc_client.so/opt/vc/lib/libvcos.so /opt/vc/lib/libbcm_host.so /opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so libpthread.so libm.so)

----------------------------------------------------------------------------------------------




If you installed samba, can use easy wordpad



save and exit.

2-4 Cmake

cmake .




2-5 Make

make




try to take a picture using camcv command.

./camcv -t 1000



PS. If make a mistake in cmakelists.txt, pi make a error. When error you retry!!


2-6(optional) Delete unused code.

Think RPI  recomend delete to below delete list.

sudo nano camcv.c   (or using word pad)

---------------------------------------------------Delete list----------------------------------------------------------


static void dump_status(RASPISTILL_STATE *state)


static int parse_cmdline(int argc, const char **argv, RASPISTILL_STATE *state)


static void display_valid_parameters(char *app_name)


static MMAL_STATUS_T add_exif_tag(RASPISTILL_STATE *state, const char *exif_tag)


static void add_exif_tags(RASPISTILL_STATE *state)


static void store_exif_tag(RASPISTILL_STATE *state, const char *exif_tag)
--------------------------------------------------------------------------------------------------------------------------

2-7 add function(save to file)

Search to default_status(&state); in camcv.c and add to below line


  1. state.filename=”foobar.jpg;

save and exit.

cmake .

make

./camcv -t 1000

If succeed to take a picture,save to foobar.jpg file.

9 comments:

  1. 똑같이 따라해봣는데 libfacerec 디렉토리가 생성되지않고
    Cmake도 되지 않습니다.
    정보창엔 project에 오류가 납니다.

    ReplyDelete
    Replies
    1. cmake package 설치하셨나요?

      sudo apt-get install cmake 하시면 설치되는데 안되어있으면 설치하고 해보세요~

      Delete
    2. 넵 설치 했습니다.
      그 올려주신 글과 다른점을 말씀드리자면
      CMakeLists.txt에 /home/pi/libfacerec 라는 경로가 있는데요
      저는 /opt/vc/userland/host_applications/linux/raspicam 이 경로에도 libfacerec 라는 경로가 없고 이것을 /home/pi/camcv 로 옮겨서 작업하고 있습니다.
      일단 올리신 글대로 따라해서 cmake . 를 한 결과\

      CMake Error : Error in cmake code at
      //home/pi/camcv/CMakeLists.txt:2:
      Parse error. Expected a command name, got unquoted argument with text " project ".
      -- Configuring incomplete, errors occurred!

      이런 화면이 나옵니다.

      Delete
    3. cmake 에러나는 건 2번째 라인인 project(camcv) 에서 나는데 argument가 잘못 되었다고 뜨네요. 한번 확인해 주시구요.

      libfacerec폴더는 제가 지금 raspberryPi가 없어서 내일 확인해 드릴께요^^

      Delete
    4. 확인해 보셨나용??
      libfacerec 폴더는 없는게 맞구요. 아마 이 다음스텝에서 라이브러리 추가하는데 그것땜에 폴더만 미리 만들어 놓는거 같네용.

      cMakeLists.txt 파일만 수정해서 해보시고 안되면 말씀해주세요.

      Delete
    5. 답글 감사합니다.
      2번째 라인인 project 에서 문제가 있는 것은 알겠으나 어떻게 고쳐야 할지 모르겠습니다.
      project가 인용 부호로 둘러싸여있지 않다는 오류가 계속 나오는데 어떻게 고쳐야 하나요?

      Delete
    6. cmakelists 파일 내용 다 지우시고 다시한번 복사해주세요. 아마 괄호가 짝이 안맞던지 아님 중간에 스펠링이 틀렸던지 그런거 같은데...

      기존폴더 다 지우시고 step2부터 다시해보시길 권장드려요

      Delete
    7. 학교 시험 때문에 늦게 하게되었습니다.
      다시 처음부터 하니까 작성이 되네요
      처음에는 GUI 에서 작성을 했습니다만
      CLI에서 작성을하니까 되네요
      os ui가 관계가있나요? 아니면 그냥 오타가 났었던건가?

      Delete
    8. 되셨다니 다행이네요^^
      아마 오타가 나지 않았나 싶어요~ㅎ

      Delete