라벨이 C인 게시물 표시

[7] Nging Server Setup - Building a Text Detection API using Drogon Server with OpenCV

이미지
Setting up text detection in RHEL and integrating it with a Drogon server to develop functionality that extracts text information as an API and displays it to clients. Note: The purpose is Text Detection, not OCR (Optical Character Recognition). OCR will be integrated later. --- ## 0. Search for Text Detection Frameworks | Framework | Language | Pros | Cons | |---------------------|-----------------|------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------| | Tesseract OCR | C++ (Python, etc.) | Open source, supports multiple languages, customizable | Can have degraded performance without preprocessing, requires integration wit...

[7] Nginx 서버 셋업 - Drogon 서버 OpenCV를 활용한 Text Detection API 구축

이미지
RHEL 환경에서 Text Detection을 Drogon 서버에 연동하여 API 형태로 추출 및 Client에 보여지는 기능 개발 주의. OCR(Optical Character Recognition, 광학 문자 인식)이 아닌 Text Detection이 목적 Detection 이후 OCR은 추후에 연동 해보는걸로.. ## 0. Text Detection 프레임 워크 서치 | 프레임워크 | 언어 | 장점 | 단점 | |---------------------|-----------------|--------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------| | Tesseract OCR | C++ (Python 등) | 오픈 소스, 다국어 지원, 커스터마이징 가능 | 전처리 없이는 성능 저하 가능, 텍스트 감지 기능이 따로 없으므로 OpenCV 등과 함께 사용 필요 | | OpenCV + EAST 모델 | C++, Python | 빠른 텍스트 감지, CPU 및 GPU 모두 지원, OpenCV와의 통합 용이 | 텍스트 감지만 지...

C++11에서 문자열의 알파벳 여부 확인하기: std::regex 예제

### C++11에서 문자열의 알파벳 여부 판단하기 C++11에서는 문자열이 알파벳(A-Z, a-z) 문자로만 이루어졌는지 확인하기 위해 'std::regex'를 사용할 수 있습니다. 이 방법을 통해 문자열이 특정 조건을 만족하는지 쉽게 검사할 수 있습니다. #### 코드 예시 ``` #include #include #include int main() { std::string str = "HelloWorld"; // 알파벳 문자만으로 이루어진 문자열 검사 (A-Z, a-z) std::regex alphaRegex("^[A-Za-z]+$"); if (std::regex_match(str, alphaRegex)) { std::cout 추가로 읽으면 좋을 것

[C/C++] Dangling Pointer란 무엇일까?

이미지
댕글링 포인터(Dangling Pointer) 란 무엇일까? 막상 이름만 들었을 땐 귀엽지만, 잘못하면 문제를 발생시키기 쉬운 녀석이다. 원인은 다음과 같다. 1. 동적 할당(힙에 할당) 된 메모리가 존재. 2. free or delete를 통해 삭제 3. 삭제된 메모리를 가르키고 있는 상태. 코드 상 예를 들자면 다음과 같다. /* 할당 */ char *str = (char)malloc(sizeof(char) * 4); strcpy(str, "test"); /* str 작업...*/ printf("str[%s]\n", str); /* 해제 */ free(str); /* str 재사용 */ if ( str ) { printf("%p str %p is Not Null [%s]\n", &str, *str, str); } /* 기대값으로, str이 가르키는 값은 해제되었기에 if문을 타지 않겠지? */ /* 허나 수행해버리고 종료되어버린다. */ --- 무슨 말인고...? 1. A 할당 = A에 대한 문자열 첫번째에 대한 주소값을 가진다. 2. A 해제 = A에 대해 주소값을 여전히 가진다. 이 과정에서 NULL로 초기화 해주는 소스코드가 들어가야한다. /* 할당 */ char *str = (char)malloc(sizeof(char) * 4); char *ptr = str; /* str 작업...*/ /* 해제 */ free(str); str = NULL; /* 해제 후엔 꼭 가르키는 주소값(포인터)을 Null로 초기화를 하자 */ /* 재사용 */ if ( str ) { printf("%p str %p is Not Null [%s]\n", &str, *str, str); } 댕글링 포인터가 많아지면 디버깅이 어려워지기에 잘 확인하여야한다. 다음은 다른 포인터 변수에 넣는 경우...

[C/C++] HTTP Server 요청 처리 [1] (Linux LineParser [readline])

HTTP는 기본적인 웹을 위한 프로토콜입니다. [*프로토콜 = 일종의 통신 규약] [ EX) 내가 A-A1-A2 라고 보낼 테니 처리해줘 라는 개념 ] Client -> HTTP 규약의 요청(Request) -> Server Client <- HTTP 규약의 응답(Response) <- Server 을 주고 받는 것이 기본 구조입니다. 엄청 자세한 것은 따로 책이나 문서를 찾아 보시는 것이 좋습니다. 그럼 요청을 어떤 구조로 보내야 기본적인 웹사이트에서 응답을 받을 수 있을까? 가 문제가 됩니다. 기본적인 포맷은 다음과 같습니다. EX] Naver 예 GET / HTTP/1.1\r\n Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n Accept-Encoding:gzip, deflate, sdch\r\n Accept-Language:ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4\r\n Cache-Control:max-age=0\r\n Connection:keep-alive\r\n Cookie:npic=qkG66SYW2jtZBlXtH/Wije5Ykpf3CQP+5H+oH3ktJhsKKMuY5MFRbu1UaznPikHHCA==; NNB=22YFY2PRRCLFQ; ASID=7c3565980000015a18ebb3aa00000059; nx_ssl=2; PM_CK_rcode=04190121\r\n Host:www.naver.com\r\n Upgrade-Insecure-Requests:1\r\n User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\r\n 다음과 같은 포맷을 전달 할 때 다음의 ...

[Unix/Linux] Thread Pool 구현 [1]

이미지
Thread Pool을 만들 일이 있어 포스팅 합니다. 일단 Event Driven 형식으로 Epoll Event가 오면, 작업을 시작하는데, Non-Block을 하려하지만 큰 파일 전송 상황을 가정하여 ThreadPool로 구현합니다. 구현을 위해서, thread 작업 클래스가 필요하며, 작업이 끝남을 알기위해, flag를 넣었습니다. 일단 기초 작업이며, 이것을 base로 작업하시면 요긴하실 것 같습니다.  우선적으로 threadPool로 사용할 클래스입니다.  작업 시 필요한 것을 class화 시키고, flag 또한 dataClass에 넣습니다. 작업이 끝남을 확인하기 위한 ch_flag Test입니다. StartService 시, false -> true로 바꾸고 do_work(thread 작업) 시 true -> false로 재변환 합니다. 그리고 endService() 에서 종료를 검사합니다. 다음은 실행 시 결과입니다. 이를 바탕으로 thread pool을 구현하겠습니다. 추가로 읽으면 좋을 것

[알고리즘] 3. 동적 계획법 개념

이미지
동적 계획법 이란, 동적 계획법(Dynamic Programming) ,  줄여서 DP는 특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는  알고리즘  설계 기법이다. 조금 장난스럽게 말해서 답을 재활용하는거다. 앞에서 구했던 답을 뒤에서도 이용하는 것으로 볼 수있다. (출처 : 나무위키 - 동적계획법 https://namu.wiki/w/%EB%8F%99%EC%A0%81%20%EA%B3%84%ED%9A%8D%EB%B2%95?from=%EB%8F%99%EC%A0%81%EA%B3%84%ED%9A%8D%EB%B2%95) 이 말처럼 DP, 동적계획법은 완전 탐색에서 중복된 부분 문제를 한번만 계산 하기 위한 메모이제이션( Memoization) 이다. 메모이제이션이란,  같은 계산을 여러 번 해야 할 때, 한 번 계산한 결과를 메모리에 저장해 이후 동일한 계산 과정을 생략할 수 있게 하는 기법이다. (출처 : 나무위키 - 메모이제이션)   https://namu.wiki/w/%EB%A9%94%EB%AA%A8%EC%9D%B4%EC%A0%9C%EC%9D%B4%EC%85%98 ) 보통 동적계획법 알고리즘 구현은, 1. 주어진 문제를 완전 탐색 이용 해결, 2. 중복된 부분 문제를 한 번만 계산하도록 메모이제이션 적용 두가지 방법으로 나뉜다. 이를 토대로 탐색을 통해 이전 값을 참고하는 것을 해 본다면, [취업] 삼성 SW후기 포스팅의 문제를 동적계획법으로 설계 해 보려 한다. 일단 문제는, Player 비행기가 끝까지 도달하였을 때, 코인의 최대값이 문제다 (자세히는 포스팅을 참조...) 보통 완전탐색으로 모든 경우의 수 탐색을 통해 해결할 수 있지만, 크기가 커지면 탐색하는데 시간 초과가 발생한다. 이를 해결하기위해 동적계획법을 쓴다면, ...

이 블로그의 인기 게시물

윤석열 계엄령 선포! 방산주 대폭발? 관련주 투자 전략 완벽 분석

대통령 퇴진운동 관련주: 방송·통신·촛불수혜주 완벽 분석

키움 OPEN API MFC 개발 (1)