저는 코드 편집기 중에 visual studio code를 주로 사용하고 있습니다. 전세계 수많은 개발자들이 사용하고 있는 대표적인 코드 편집기죠. 보통 줄여서 vscode라고 부릅니다.
vscode에는 개발을 좀 더 편하게 해주는 다양한 확장 플러그인들이 있습니다. 오늘은 그 중에서 웹 개발에 유용한 확장 플러그인을 하나 소개해드리려고 합니다. 바로 Auto Rename Tag입니다. html에서 여는 태그와 닫는 태그를 한 번에 수정할 수 있게 도와주는 아주 유용한 놈입니다.
vscode의 유저인터페이스를 보면 좌측에 툴바가 있습니다. 거기서 네모 네 개로 이뤄진 아이콘을 클릭하시면 vscode의 확장 플러그인을 검색할 수 있습니다. 검색창에 Auto Rename Tag라고 입력하신 후에 나오는 첫번째 플러그인을 설치하시면 됩니다.
자, 그럼 이제 한번 테스트해보겠습니다. 커서가 올라가 있는 div 태그의 여는 태그를 다른 태그로 수정해보겠습니다.
저는 지금 여는 태그만 수정했을 뿐인데, 닫는 태그도 동시에 자동으로 수정된 것을 확인할 수 있습니다.
Auto Rename Tag는 개발의 생산성을 한 층 높여줄 수 있는 아주 고마운 확장 플러그인입니다. vscode를 사용하고 계시지만 아직 사용해보지 않은 분들은 한 번 사용해보시길 추천드립니다.
오늘은 python과 opencv를 이용해서 ip 카메라(cctv)로부터 영상 신호를 받는 방법에 대해 공유하고자 합니다.
우선 usb 카메라(흔히 우리가 부르는 웹캠)를 통해 영상 신호를 받을 때는 이런 코드가 사용됩니다. python+opencv를 사용해보신 분에게는 아주 익숙한 한 줄일 것입니다.
capture = cv2.VideoCapture(0)
그런데 만약 ip 카메라로부터 신호를 받을 때는 다음과 같은 코드를 사용해야 합니다. 필요한 url은 각자 상황에 따라 다를 것입니다. 사용하시는 ip 카메라의 메뉴얼 등의 문서를 참고하시면 됩니다. 192.168.0.33:554/h264major는 제 상황에 맞는 코드라는 것을 기억해주세요.
보통 ip 카메라의 영상을 스트리밍할 때는 위와 같이 rtsp 프로토콜이 사용됩니다. rtsp는 real time streaming protocol의 약어로 그대로 번역하자면 실시간 스트리밍 프로토콜입니다. 프로토콜이라는 것은 통신규약이니까 rtsp는 간단히 실시간으로 동영상을 송수신할 때 지켜야할 규약이라고 생각하면 될 것 같습니다.
만약 username과 password가 필요한 경우에는 아래와 같은 방식으로 코딩해주면 됩니다.
필자가 처음으로 접했던 프로그래밍 언어는 C언어다. 윤성우의 열혈강의를 읽으면서 재밌게 코딩의 세계에 입문하게 되었던 기억이 난다. 그리고 석사 과정을 밟으면서는 matlab을 많이 사용했다. 해당 연구 분야의 시뮬레이션 코드들이 대부분 matlab으로 작성되어 있었기 때문이다. 그러나 머신러닝/딥러닝을 연구에 접목하면서부터는 matlab의 한계를 느끼기 시작했다. 대부분의 라이브러리가 유료였기 때문이다. 그래서 넘어오게 된 언어가 바로 파이썬이다. 파이썬에서는 머신러닝/딥러닝에 관한 많은 훌륭한 라이브러리가 무료다. 그리고 직장에 와서도 여전히 파이썬을 이용해서 웹 사이트와 응용 프로그램 등을 개발하고 있다. 파이썬이 필자에게 돈을 벌어다 주는 언어가 되었다.
현재 필자는 프로그래밍 언어 중 파이썬 비교적 가장 많이 친하긴 했지만, 파이썬스럽게(pythonic 이란 표현을 쓰더군요) 코딩하고 있는 지는 아직 의문이 들 때가 많다. 내가 짠 코드는 파이썬 코딩을 하는 사람들이 쉽게 이해할 수 있는 코드인가? 누군가와 협업하기에 좋은 코드인가?
필자와 같은 고민을 하고 있는 개발자 또는 개발자 지망생을 위한 문서가 있다.
무려 파이썬 언어의 창시자 귀도 반 로섬이 작성한 PEP 8 - Style Guide for Python Code를 읽어보자. 파이썬 코딩을 위한 관습을 정리해놓은 문서다. 참고로 귀도 반 로섬은 1956년 생이고 네덜란드 출신의 프로그래머다. 환갑이 넘었지만 여전히 활발히 활동하고 있다.
자, 그러면 PEP 8의 내용을 함께 정리해보자. 필자 눈에 띄었던 부분을 위주로 정리했으니 좀 더 자세한 내용은 원본 문서를 참고하기 바란다.
1. 가장 중요한 것은 일관성이다. 일관성 있는 스타일로 코딩해야 한다는 것이다. 여기서는 이런 식으로, 저기서는 저런 식으로 하면 코드의 독자들의 가독성을 현저히 떨어뜨릴 수 있다.
2. 들여쓰기 레벨마다 4개의 스페이스를 사용해라(4칸을 띄워라). 탭보다는 스페이스를 사용하는 것이 좋다.
리스트와 튜플 등에 대해서는 다음과 같은 방식으로 들여쓰기를 사용하라.
3. 한 줄은 최대 79개의 문자로 제한하라.
4. 이항 연산자 전에 줄을 바꿔라.
5. 클래스 정의 뒤에는 두 줄, 함수 정의 뒤에는 한 줄을 띄워라.
6. 임포트는 분리된 라인으로 이뤄져야 한다. 임포트는 항상 파일의 최상단에서 이뤄지게 하라. 와일드카드 임포트(from <모듈> import *)는 피해라.
7. 의미없는 공백(whitespace)을 만들지마라.
하지만 가독성을 위해 공백을 사용해야 할 때도 있다.
다른 것과 정렬시키기 위해 일부러 공백을 만들지마라.
8. 사칙연산 관련해서는 다음과 같이 공백을 활용하여 가독성을 높여라.
9. 여러 구문(statements)을 한 줄에 사용하는 것은 지양하라.
10. 주석은 코드가 바뀔 때마다 최신 상태에 맞게 업데이트해줘라. 모순된 주석은 없는 것보다 못하다. 가급적 영어로 주석을 달아라.
11. 줄 주석(line comments)은 최소한으로, 아껴서 사용하라.
12. 모든 모듈, 함수, 클래스, 메서드에 대해 독스트링(docstring)을 써라.
참고로 독스트링이란 해당 모듈, 함수 등이 어떤 일을 수행하는지 설명하는 문자열이다. 아래 예제 코드에서 쌍따옴표 3개로 감싸진 부분이 독스트링이다.
pyqt, pyside 앱에 이미지를 넣고 싶을 때는 QLabel 위젯을 활용할 수 있다. 이때 이미지를 넣을 때 이미지의 크기를 원래 크기와 다르게 해주려면 QPixmap 클래스의 scaled 메소드를 활용해야 한다. 이미지의 크기를 지정해줄 때는 이미지의 종횡비(aspect ratio)를 어떻게 설정할 것인가를 고려해야 한다. 종횡비는 이미지의 가로세로 비율이라고 생각하면 된다. 이미지의 경우 대체로 종횡비를 유지하는 것이 실제 비율을 해치지 않기 때문에 좋다.
만약 원래 이미지의 종횡비를 무시하고 지정하는 크기에 맞출 것이면 aspectMode를 Qt.IgnoreAspectRatio로 해주면 된다. 종횡비를 유지할 것이면 Qt.KeepAspectRatio로 설정하면 된다. 하지만 아래 보는 것처럼 여백이 생긴다. 그리고 Qt.KeepAspectRatioByExpanding으로 설정하면 종횡비를 유지하기 위해서 우리가 설정한 사이즈를 넘어간다. 프로그램이 의도하는 바에 따라서 적당한 flag를 선택하면 될 것이다.
전체 코드는 다음과 같다. 이미지가 200 x 200 의 크기로 표출되기 원하는 상황에서 종횡비 모드를 다양하게 바꿔본 것이다.