목록Programming (14)
행복한 하루
안녕하세요. 시리얼(UART) 통신을 하다 보면 HEX(16진수) 데이터를 많이 보게 됩니다. 그런데 python에서 화면에 표시하려면 생각한 것처럼 예쁘게 나오지 않습니다. 그래서 간단하게 알고 있으면 좋을 내용이 있어서 적어보았습니다. 기본적으로 Hex라고 하면 0x00~ 0xFF로 표기가 됩니다. 그러나 0x를 뺄 수도 있고, 00 두 자리로 표시할 수도 있고 대문자로도 할 수 있고 정의하는 곳에 맞게 출력할 필요가 있습니다. 그래서 맞는 옵션을 찾아서 출력설정을 하면 도움이 될 거라고 생각됩니다. 그리고 MicroPython에서 바로 지원하지 않는 함수도 있을 수 있으니 개발 환경에서 작동하는지 확인이 필요해 보입니다. 1. 변환 함수로 10진수 -> 16진수(HEX) 변환 - hex(정수) 함수..
안녕하세요. asyncio는 async/await 구문을 사용하여 동시성 코드를 작성할 수 있게 해주는 모듈로, asyncio를 사용하면 단일 스레드 작업을 병렬로 처리할 수 있습니다. 그리고 async 함수에서 리턴하는 값도 받을 수 있습니다. 그런데 MicroPython에서는 리턴 값을 받는 방법이 약간 달라서 남겨봅니다. - Python3.7 이전과 이후에 따라 ansyncio모듈에 추가된 함수가 있어 사용방법 차이가 있는 것으로 보입니다. 현재 MicroPython1.20, python3.9으로 테스트했습니다. 1. 일반 Python에서 비동기 함수에서 리턴 받는 코드 - 간단한 샘플 코드로 숫자의 합을 구하는 비동기 함수를 만들고 A, B의 두 개의 Task로 해서 coroutine으로 생성합니..
안녕하세요. 연산자 확인 2번째 내용으로 나머지 비트연산자와 비교연산자를 확인해 보았습니다. 기존 사용하는 언어와 Python에서 사용하는 것에 차이가 있는지 확인해 보는 시간이 되었으면 합니다. 1. 비트 연산자 단순 비트 연산을 한다면 쉽지만, NOT 연산자를 사용할 때는 한 번쯤 값이 맞는지 출력해 보고 진행해야 합니다. bin(~0b0011) 이라고 하면 출력이 '0b1100' 될 것 같지만 그렇게 되지 않았습니다. '-0b1101' 로 -가 붙고 +1이 되는 것을 알 수 있습니다. 정확한 것은 모르겠지만, 2의 보수처럼 처리하려고 보이려고 느껴집니다. 비트연산할 때 뒤에 & 연산을 더해주면 생각했던 것과 같이 반전된 결과를 확인할 수 있습니다. bin(~0b0011 & 0b1111) 이면 '0b..
안녕하세요. 이전 내용에서 Raspberry Pi의 Multicast로 데이터를 보내는 것을 확인했습니다. 다음 내용으로 보낸 데이터를 확인하는 것이 필요합니다. 그래서 찾던 중에 리눅스와 윈도우에서 크로스 컴파일되는 Qt 예제 코드가 있어서 확인해보았습니다. Raspberry Pi4를 이용한 멀티캐스트 송신 코드 및 테스트 (Multicast Sender) 안녕하세요. IPTV나 네트워크 쪽으로 통신 프로그램할 경우가 아니면 주로 사용하는 방식은 아니지만 이번에 확인할 일이 있어서 찾아본 내용 공유드립니다. 송신부는 C 프로그램으로 테스트하 remnant24c.tistory.com 1. Receiver 소스 확인 - Receiver 클래스에서 단순한 UI 구성과 함수를 생성해서 작동하도록 되어 있습니다..
안녕하세요. 문자열 추출하는 구현은 기본적으로 끝이 났습니다. 그렇지만 성능을 조금 향상하기 위한 기능을 추가해보도록 하겠습니다. 컴퓨터에 desktop 화면을 드래그 선택해서 캡쳐 이미지에서 문자를 추출하는 기능을 추가해 볼 예정입니다. 이전 내용 처럼 frozen_east_text_detection.pb 파일은 디버그 디렉터리에 있어야 합니다. 1. ScreenCapturer 클래스 생성 - QtCreator에서 LiteracyW 프로젝트를 불러온 후 프로젝트 파일에서 오른쪽 버튼을 눌러 “Add New”를 눌러 C++ Class를 생성합니다. - 클래스 이름을 ScreenCapturer로 하고 base class를 QWidget으로 선택해서 생성합니다. 그러면 header 파일과 Source 파일이..
안녕하세요. 이전 내용에 추가해서 전체 이미지상에서 문자열을 바로 추출하는 것이 아니라, 텍스트 영역을 검색하는 detector를 추가해서 좀 더 정확한 문자열을 추출해봅니다. 1. EAST detector 학습된 자료 다운로드 - OpenCV의 EAST(Efficient and Accurate Scene Text) text detector는 novel architecture와 training pattern을 바탕으로 하는 deep learning model입니다. 그래서그래서 학습을 시키는 과정이 필요한데, 여기서는 미리 학습한 데이터를 이용하는 것으로 합니다. - 이전 내용 LiteracyW_day3에 폴더에 학습된 데이터를 다운로드합니다. (이 글에서는 day4로 새로 디렉터리를 생성해서 하기에 d..
안녕하세요. 아쉽게도 바로 이전 내용에서 윈도용으로 진행했었는데, 윈도우상에서 Qt와 tesseract, OpenCV 조합하기가 어려워져서 라즈베리 파이로 환경을 바꿨습니다. 이후 내용은 리눅스 기반에서 작업하는 것으로 생각하시면 됩니다. 이전 Rasbperry Pi 내용에서 Tesseract 4.1.3을 Raspberry Pi CM4에 설치했다는 것을 전제로 아래 내용을 진행합니다. (하단 링크 참고) 추가로, 현재 최신 버전인 Tesseract 5.1.x를 설치해보려고 했으나 현재 라즈베리 파이 상에서는 설치가 되지 않았습니다. (다른 OS에서는 테스트해보지 않았습니다.) Raspberry pi CM4(Bullseye)에서 Tesseract 4.1.3 설치 및 OCR 테스트 안녕하세요. Windows..
안녕하세요. 이번 주제를 이미지에서 글자를 추출하는 프로젝트입니다. 많이 알고 있는 광학 문자 인식(Optical character recognition; OCR)입니다. 오픈된 라이브러리를 사용해서 인식하고, 또한 위치도 파악해서 표시도 해보는 내용입니다. 1. OCR의 역사 OCR의 역사는 1928년에 독일의 G. Taushek가 미리 준비된 몇 개의 표준 pattern문자와 입력문자를 비교하여 표준 pattern문자와 가장 유사한 것을 해당 문자로 선정하는 pattern matching기법을 이용한 문자 인식 방법을 특허로 등록하면서 시작되었다. 연구소나 기업 등에서 대형 컴퓨터를 통하여 수행되던 것이 PC와 이미지 스캐너의 보급으로 우리 가까이 사용되기 시작한 것은 이미 20년이 넘었다. 해외에서..
안녕하세요. 이전 내용을 총정리하는 단계로 얼굴 특징점을 찾아 안경과 콧수염, 쥐 코를 선택하여 실시간 영상에 반영할 수 있도록 합니다. 선택하는 것은 체크박스를 생성하여 선택할 수 있도록 합니다. 이전 파일에 오타 등이 있기 때문에 이번 첨부된 소스를 참고하시면 됩니다. 1. 소스파일 수정 1) capture_thread.h - 어떤 특징점에 어떤 것을 표시할지 열거형의 타입을 생성합니다. 여기서 MASK_COUNT는 기능을 나타내는 것이 아니라 열거형의 개수를 확인하기 위한 마지막 카운트 값으로 사용 - 체크상태를 업데이트할 수 있는 함수를 선언 - 어떤 체크박스인지, 기능을 설정할지 여부를 인자로 가지는 함수를 선언 - 체크박스의 각 상태를 비트 값으로 저장하는 형태로 하기 위해서 masks_fla..
안녕하세요. - gstreamer를 사용함에 있어서 문제는 없지만, 제공해주는 라이브러리 말고 필요한 기능을 추가해서 플러그인 라이브러리를 만들어 보고 싶었습니다. 그리고 현재 gstreamer 개념에 대해서 완벽하게 이해하지는 못해서 상세한 설명은 가능하지 않지만, Plugin개발은 가능하지 않을까를 우선 확인해보았습니다. - 인터넷에서도 자료가 있지만 이전 컴파일 방법이거나 gstreamer doc 파일에도 최종 실행까지 상세하게 설명이 되어 있지 않아서 결과를 볼 수가 없었습니다. 그래서 현재 시점에서 하는 찾아보았습니다. 1. 테스트 환경 - OS : ubuntu 20.04 LTS 64bit - gstreamer설치 전 필요한 프로그램 $ sudo apt-get install -y --force-..
안녕하세요. 이전 내용에서 얼굴과 얼굴의 특징점(눈, 코, 입 등)을 비디오상에서 감지하는 코드를 작성하였습니다. 이 특징점에 장신구(Ornaments)를 적용(그리는 것)시키는 것을 해보겠습니다. 이 책에서 제공해주는 장신구는 안경과 콧수염, 쥐의 수염 이미지를 제공해주고 있습니다. 이 이미지를 그냥 불러서 사용해도 되겠지만, Qt에서 관리적인 차원에서 사용하려면 리소스 파일을 만들어서 사용할 수 있습니다. 그래서 코딩하기 전에 간단한 리소스 파일을 만들어야 합니다. 그리고 리소스 파일을 불러와서 특징점 좌표에 회전된 값을 구하여 그려주는 작업을 하면 됩니다. 1. 리소스 파일 만들기 1.1 image.qrc 파일 만들기 - 우선 FacetiousW 소스가 들어 있는 폴더에 Images 폴더를 만들고 ..
안녕하세요. 이전 내용에서 얼굴을 감지하는 것을 해보았습니다. 그리고 얼굴의 특징점을 찾기 위해서 OpenCV의 contrib 라이브러리 소스를 컴파일하고 라이브러리 파일을 만들어 보았습니다. 이번에는 그중에 face 라이브러리를 사용해서 얼굴에 있는 눈, 눈썹, 코, 입을 감지해보도록 하겠습니다. 1. 라이브러리 확인 이번에 사용할 libopencv_face 라이브러리를 이용할 것입니다. 참고로 이 라이브러리에 어떤 함수들이 확인해볼 수 있는 링크를 걸어 두었습니다. https://docs.opencv.org/4.5.3/d4/d48/namespacecv_1_1face.html - 얼굴의 특징을 잡아낼 수 있는 FacemarkKazemi, FacemarkAAM과 FacemarkLBF classes 등이 ..
안녕하세요. Facetious 내용 중 OpenCV-contrib 모듈에 있는 기능을 사용하기 위해서 우선 OpenCV-contrib 버전을 설치해야 합니다. 처음 OpenCV 설치할 때 같이 설치했으면 좋지 않았을까 하지만, 지금 내용이 나오기 때문에 어떻게 추가 설치하는지 확인해보도록 하겠습니다. 단, 이전 내용에서 Windows용 OpenCV를 64bit용 Mingw32 컴파일해서 OpenCV 라이브러리를 사용하고 있다는 전제에서 아래 내용을 진행하시면 됩니다. 만약 OpenCV 설치하는 과정이 필요하다면 아래 링크를 참조하시면 됩니다. 그리고 Windows용으로 OpenCV를 설치할 때 윈도용으로 압축된 프로그램을 실행하시는 것을 추천드립니다. (https://sourceforge.net/proj..
안녕하세요. 이번에 시리얼 데이터를 화면에 출력해해 주기 위해서 어떤 GUI 툴을 사용해볼까 하다가 PyQt5를 테스트해보았습니다. PyQt 설치하고 하는 것은 문제가 없었는데, 실행파일을 만들고 배포하기 위해 실행파일을 만들면서 에러가 발생하여 해결한 내용이 있어 조금 도움이 될까 해서 공유드립니다. 1. 개발 환경 - 참조 사이트를 참고하여 최신 PyQt5 설치 - 개발 툴은 파이참(PyCham)을 설치하고 아나콘다(Anaconda)도 설치해서 필요한 Library를 가져오는 형태를 취하였습니다. 2. 문제 발생 내용 - 시리얼 통신 소스를 Run(Ctrl + Shift + F10)으로 실행할 경우 에러 발생하지 않고 실행됨 - pyinstaller로 실행파일을 만들어 exe파일 실행 시 Failed..