본문 바로가기

study/영상처리 & opencv

[javascript/python] colab에서 웹캠 실행하기

colab에서는 opencv에서 웹캠을 사용하는 cv2.VideoCapture(0) 코드가 동작하지 않는다. 저 코드는 기기에 연결된 장치를 불러오는 데 colab은 서버에 연결되어 있기 때문이다..!

 

따라서 www.it-swarm.dev/ko/python/google-colab%EC%97%90%EC%84%9C-cap-cv2videocapture-0-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95/809606863/ 링크 안의 https://colab.research.google.com/notebooks/snippets/advanced_outputs.ipynb#scrollTo=2viqYx97hPMi 에서

Camera Capture부분의 코드를 사용하여 colab에서 웹캠을 실행해보았다.

 

갑자기 opencv 해보려다 colab에서 javascript로 웹캠 코드를 실행하게 되서 굉장히 당황스러웠지만 일단 코드 쪼개서 나름 이해한대로 주석을 달아보았다.

 

코드 1
코드 1 이어서
코드 2

- async / await

async / await 는 코드를 좀 더 효율적으로 실행시킬 때 사용한다고 한다. 비동기적(Asynchronous) 프로그래밍이다.

내가 살짝 이해한 바로는 코드 안에서 코드 a를 기다리게 되면 a 밑의 코드들은 a가 끝날때까지 실행되지 못한다.

따라서 a를 기다리는 친구 , 그리고 a 밑의 코드를 실행시키는 친구로 나뉘어서 실행되게 된다.

async 함수가 비동기식 처리 할수있게 하는 함수이고 비동기로 처리할 것(기다리기를 원하는 코드) 앞에 await 를 적어주면 된다.

나는 thread의 개념으로 이해했다. 사실 이렇게 이해했을 때 만약 친구가 나눠지고 나서는 나눠진채로 실행되는지, 아니면 기다리던 코드가 실행이 되면 나중에 합쳐지는건지, 기다렸다가 받은 data를 쓸 곳에서 한 친구가 다른 친구 올때까지 기다리는지 자세한 내용이 궁금하지만 정확히는 모르겠다 ..! 나중에 더 정확히 읽어봐야겠다ㅠㅠ

 

developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Concepts 더 궁금하신 분들은 한번 읽어보세요 ..!

 

  #javascript 코드 실행한 결과 반환값을 파이썬에게 전달(대충 그런 의미..)
  data = eval_js('takePhoto({})'.format(quality))

 

이 부분은 javascript 함수 코드를 실행한 후의 결과를 파이썬에게 전달해주는 것 같다. javascript takePhoto() 함수에  quality 인자 전달해서 실행시키고 결과를 파이썬 data로 받기 ! 로 이해했다. 

 

그리고 위에서 button이 만들어진 이유는 코드가 웹캠이 실행되고 나서 capture button을 누르면 웹캠이 멈추고 capture된 사진이 저장되기 때문이다.

 

왼쪽 사진처럼 돌아가다가 capture버튼을 누르면 멈추고 사진이 찍힌다.
그리고 사진이 저장된 것을 알 수 있다.

colab에서 웹캠을 사용하기 위해서는,, 이렇게 javascript를 이용해야 하는 것 같다,,!

 

code 정리 : colab_웹캠_이용_코드.ipynb