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로 웹캠 코드를 실행하게 되서 굉장히 당황스러웠지만 일단 코드 쪼개서 나름 이해한대로 주석을 달아보았다.
- 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된 사진이 저장되기 때문이다.
colab에서 웹캠을 사용하기 위해서는,, 이렇게 javascript를 이용해야 하는 것 같다,,!
code 정리 : colab_웹캠_이용_코드.ipynb
'study > 영상처리 & opencv' 카테고리의 다른 글
[영상처리] 2D변환 - Rigid Transformation (0) | 2021.01.27 |
---|---|
[영상처리] RANSAC 알고리즘 (0) | 2021.01.21 |
[opencv] 직선 검출(Line Detection) (0) | 2021.01.18 |
OpenCV(Open Source Computer Vision Library) (0) | 2020.12.27 |
[opencv] imread(), imshow(), imwrite(), matplotlib 왕기초 (0) | 2020.09.06 |