[LMS7 24/28주차] 1024 MFC 프로젝트, "CanSCan" 완료 보고서

2026. 5. 6. 14:03·C++/Project

0. 개발완료보고서

프로젝트 소개
팀원
김신혜, 김종관, 마승수, 박종찬, 유진, 이명진, 진리
활동일시
2025.10.24(금) ~ 2025.10.30(목)
프로젝트
CanSCan , MFC 프로젝트
주요주제
카메라에 연결된 클라이언트와 AI 서버를 연결하여 캔 찌그러짐 판별
개발 목적
캔의 양품/불량품 여부를 판별하여 캔의 불량률을 최소화
개발 환경
Language: C++(MFC) / C#(.NET) / Python
OS: Windows 10 / Visual Studio 2022, VS Code, MySQL, Git
구현기능
1. C++ MFC 클라이언트
- 카메라 - 클라이언트 연결, 카메라에 찍히는 이미지 실시간 확인 기능
- UI버튼 클릭시 카메라 화면 캡처, 이미지 전송 기능
- 이미지 전송시 원하는 파일확장자로 전송하는 기능 (.jpg/.png)
- 서버로부터 이미지 추론 결과를 수신
- 수신한 이미지 추론 결과(PASS/FAIL)를 클라이언트 UI로 출력
- 총 생산량, 정상 수량, 불량 수량을 카운트, UI에 출력
2. C# 서버
- C++ 클라이언트와 네트워크 통신 연결 직후 자동으로 Py서버와 연결
- C++ 클라이언트로부터 받은 이미지 그대로 Py서버로 중계
- C++ 클라이언트로부터 받은 이미지를 서버 컴퓨터에 저장 후 DB에 경로 저장
- 양방향간 패킷 수신시 수신완료 응답
- Py서버로부터 받은 결과값 C++ 클라이언트로 전송
- Py서버로부터 받은 결과값 DB에 저장
- UI를 통해 패킷 중계상황, DB연결 상황, 이미지 저장경로, 통신 연결상황 모니터링
3. Py 서버
- C# 서버로 받은 이미지를 Ai 가 찌그러짐 판별
- 판별 후 결과 값을 C#서버로 전송
- C# 서버로부터 패킷 수신시 수신완료 응답
4. DB
- 이미지 전송 시간, 이미지 서버컴퓨터 저장경로, 이미지 추론 결과 , 이미지 id 저장
- 고유한 DB용 id를 통해 데이터 관리
개발 후기
김신혜
이번 프로젝트에서는 팀장과 C# 중계서버 구현을 맡았습니다.현업에서 C++ MFC로 카메라 검사부터 PLC 전달까지 1초 미만으로 처리한다는 강의를 떠올리며, 이번에는 프로젝트가 거창하지 않더라도 그 흐름과 시간을 실제로 재현해 보자는 목표를 세웠습니다.
​
각 언어가 다른 상황이라 패킷 주고 받을 때 소켓의 안정성과 정확성, 데이터 크기, 메모리 등 고려해야할 부분이 많다고 생각했습니다.
통신규격을 정하기 위해서 팀원들과 오랜 시간을 들여서 회의했습니다. 가장 적절한 패킷 구조를 찾으려 노력했고 공들인만큼 데이터 오류를 크게 줄일 수 있었습니다. 팀장으로 각 파트별 진행상황을 체크해가면서 테스트를 지속적으로 진행하는 것도 쉽지 않았습니다. 하지만 오류를 발견할때마다 파트별로 에러를 잡고 구현한 로직 등을 공유하면서 더 안정적이고 효율적인 방식이 무엇인지 고민하는 과정이 재밌었습니다.
C++ Qt 개인프로젝트때를 생각하면 그땐 코드를 따라치기 급급했었지만 이번 프로젝트에서는 여러 방식을 고민하고 이해하는 실력까지 왔다는 생각이 들어 재밌게 임했습니다.
​
클라이언트의 접속이 끊어졌어도 Py서버와 연결을 유지했더니 클라이언트의 재접속 후 데이터를 주고 받는 과정에서 간헐적으로 패킷이 전송안되는 오류를 발견했고 C++과의 소켓과 Py소켓을 1대 1로 연결시켜 접속 종료를 감지, 그럼 다른 방향도 같이 접속종료를 시켜 안정성을 높이는데 성공시켰습니다. 그 과정에서 애증의 Cancellation Token을 다시 마주치게 되었고 더 정확하게 이해하는 계기가 되었다고 생각합니다.
​
C#에서는 프로그래머의 편의를 위해 메서드 코드라인 한 줄로 해결되는 경우가 많아 구현은 쉬웠지만 동시성, 예외 처리, 지속성 계층 등에서 추가적으로 공부하면서 C++ MFC 쪽 이해도 함께 넓혀 이 프로젝트를 확장시키고 싶을 만큼 재밌는 프로젝트 였습니다.
김종관
이번 프로젝트는 C++/MFC 클라이언트, C# 서버, AI Python 서버 세 파트로 나누어 진행했습니다.
​
다른 프로젝트에 비해
소통과 협업이 정말 잘 된 프로젝트라고 생각합니다.
제가 담당한 AI Python 서버와
다른 두 파트인 C++/MFC Client 및 C#서버 간 캔의 불량품/양품의 라벨을 class_0/1로 구분하는 부분,
서로 다른 언어로 된 세 파트 간 통신규격을 "리틀 엔디안-리틀 엔디안-리틀 엔디안" 로 확정하는 부분,
전송하는 패킷의 헤더,바디를 나누어 Type별 메시지를 정의해서 데이터 교환 체계를 만드는 부분을
프로젝트 기간 내내 꾸준히 회의하면서 정리했던 시간들이
프로젝트를 완성시킬 수 있게 했습니다.
​
프로젝트 초기에는 캔의 컬러사진만 검출하는 AI코드만 만들었는데, 프로젝트에서 사용하는 'Basler카메라'가 '흑백'으로만 영상촬영을 할 수 있었기 때문에 흑백사진을 검출하는 Python AI버전도 만들어서 흑백 영상으로도 캔의 찌그러짐을 판별할 수 있게 하였습니다. 이 부분에 대해 유연하게 대처했다는 점도 프로젝트를 완성하는데 도움이 되었습니다.
​
Python AI는 YOLOv8로 설정해서 구성했습니다. 최신 모델인 YOLOv8은 YOLOv5보다 더 정확하고 간단하기 때문에 사용했으며, 캔의 찌그러짐 구별은 PASS(0)/FAIL(1)결과로 판단해서 판별 결과를 이미지에 시각화해 저장하도록 구현했습니다.
​
AI서버는 이미지 수신과 AI추론, 결과 전송, 클라이언트 확인 및 재전송이 가능하도록 구현했으며
이 때 서버 간 전송하는 데이터 방식은 바이너리 데이터를 헤더-바디 부분으로 만들어서 MSGTYPE(메시지타입)을 구성했습니다.
​
Python AI를 직접 사용해 학습/검출하는 방법을 보다 자세하게 알 수 있어 좋았고, MFC환경을 이에 연동해보았다는 점, 서버와 데이터를 송/수신하는 것에 보다 익숙해졌다는 점도 프로젝트를 참여하면서 많이 배운 부분이었습니다.
마승수
"DETECT_RESULT 테이블은 제품 불량 여부를 기록하기 위해 최소한의 data만을 기록하였습니다. 단순하게 구성하여 관리와 조회가 용이하도록 구현했습니다. 또한, 자동 시간 기록과 고유 식별 기능으로 데이터 신뢰성과 확장성을 확보했습니다."
박종찬
이번 프로젝트에서 저는 Python 기반 AI 서버를 구현했습니다. 저희 팀은 C++/MFC, 서버 C#, AI 서버 Python로 구성되어 있어, 서로 다른 언어 간 통신 규격을 사전에 합의하고 패킷을 헤더와 바디로 나누어 Type별 메시지를 정의하며 안정적인 데이터 교환 체계를 만들었습니다.
​
서버는 클라이언트로부터 이미지를 받아 AI 모델로 분석하고, PASS/FAIL 결과를 판단하며, 탐지 결과를 이미지에 시각화해 저장하도록 구현했습니다. YOLO 모델을 활용해 캔 불량을 검출하고, 객체가 탐지되지 않거나 이미지 디코딩에 실패하면 자동으로 FAIL 처리되도록 설계했습니다.
​
서버는 여러 클라이언트가 동시에 접속해도 블로킹 없이 안정적으로 처리되도록 구성했으며, 이미지 수신부터 AI 추론, 결과 전송, 클라이언트 확인 및 재전송까지 모든 과정을 자연스럽게 통합했습니다.
​
이번 경험을 통해 AI를 실제로 사용해 보니, 결과가 생각보다 확실하지 않고 흑백 카메라처럼 환경에 따라 판단 확률이 크게 달라진다는 것을 직접 느낄 수 있었습니다.
유진
네트워크 통신이 중요하다고 생각하지만, 이번 프로젝트에서는 MFC 기업 프로젝트라는 성격에 맞게 MFC 툴을 사용하는 것이 적절하다고 판단했습니다.
저는 MFC 클라이언트 파트를 맡아 전체 UI 기획·설계 및 기본 UI 세팅을 담당했습니다.
​
첫날에는 프로젝트 주제를 선정하기 위해 다양한 아이디어와 의견이 나왔습니다.
그중에서도 광학 문자 인식(OCR), 데드 픽셀 검출, 캔 불량 검출이 인기가 높았고, 이 세 가지 중 어떤 주제를 선택할지 팀원들과 고민했습니다.
​
전체 시스템 구조는 클라이언트(C++) ↔ 서버(C#) ↔ AI 서버(Python)로 구성하기로 했지만 다양한 언어와 네트워크 구조를 봤을 때 프로젝트 기간과 난이도를 생각했습니다.
​
OCR과 데드 픽셀 검출은 직접 사진을 촬영해 데이터를 확보하고 학습시키는 과정에서 많은 시간이 필요할 것으로 보였고, 이미 데이터가 풍부한 캔 이미지를 활용해 캔 불량 검출 시스템을 만드는 것으로 주제를 최종 결정했습니다.
​
MFC 툴을 직접 다뤄보면서 MFC는 C++의 객체 지향 기능을 활용하여 코드를 체계적으로 구성하고 재사용할 수 있어서 효율적으로 관리할 수 있고, 데이터와 기능을 하나의 클래스로 묶어 유지보수하기가 좋다라는 장점과 WindsForms와 Qt에 비해 UI나 기능 구현에 한계가 있고, 복잡할 수 있다는 단점을 체감하게 되었습니다.
​
하지만 워드를 다루다가 단축키와 툴이 다른 한글을 다루는 거와 같다고 생각이 들어 MFC도 익숙해지면 쉽게 다룰 수 있겠다고 생각했습니다.
​
또한 이번 팀 프로젝트에서는 팀장님의 Git 레포지토리를 공유받아 각 파트별로 브랜치를 관리하고, 동일 브랜치 내에서 파트원들과 파일을 협업 관리하는 방법을 배웠습니다.
​
이번 프로젝트를 통해 MFC 활용 능력뿐만 아니라 Git 사용 능력까지 함께 성장할 수 있었던 점이 가장 좋았습니다.
이명진
이번 프로젝트에서 MFC 클라이언트 구현을 맡았습니다.
저희 팀은 클라이언트(C++), 서버(C#), AI 서버(Python)로 되어있어, 사용 언어가 서로 달라 통신에 있어 사전 합의를 필요로 했습니다.
따라서 패킷을 헤더와 바디로 각각 나누어 이미지, 결과에 대해 서로 알 수 있도록 하였습니다.
​
MFC의 실제 기능을 구현하면서 사용한 하드웨어는 Basler 카메라이고, 이를 다룰 도구로 pylon API와 openCV를 사용하여 영상처리를 하였습니다.
구현 중 가장 곤란했던 부분은 MFC를 처음 사용했던 점입니다.
기존 C++에 있던 main이 MFC에서는 없었고, Program 과 ProgramDlg 사이 스택 구조를 이해하는데 많은 시간이 걸렸습니다.
​
또한 우분투와 달리 윈도우는 apt와 같이 전역 설치 패키지가 없었기 때문에 일부 라이브러리들은 수동으로 설치하고, 경로를 설정해줘야 하는 번거로움이 있었습니다.
하지만 시스템 환경변수 편집을 이용해보며 경로 설정에 대한 많은 학습을 하여 많은 도움이 되었습니다.
​
마지막으로 팀 소통이 원할했던 점이 이번 프로젝트에서 가장 큰 경험이였는데,
첫번째로 깃을 이용한 브랜치 관리와 사전합의된 규칙으로 이전의 프로젝트에서 지속적으로 발생했던 소통의 문제점을 많이 해결해주었습니다.
두번째로 패킷구조에 대한 사전합의에 많은 시간을 소비했지만 실제 데이터를 주고 받을 때 발생할 수 있던 문제점들을 줄여주었다고 생각하여 만족스럽게 생각합니다.
​
앞으로 구현할 프로젝트에도 실 구현 이전 많은 소통과 구현 중 소통에 많은 관심을 기울이도록 노력하겠습니다.
진리
이번 프로젝트에서 저는 MFC 클라이언트 구현을 담당했습니다. 저희 팀은 C++(클라이언트), C#(서버), Python(AI 서버)라는 서로 다른 언어로 구성되어, 통신 규격 사전 합의가 가장 중요한 첫 단추였습니다. 헤더와 바디로 패킷을 명확히 나누고, 이미지 및 결과 데이터에 대한 상호 이해를 높이는 방식으로 표준을 수립했으며, 이 사전 소통은 실제 구현 단계에서 발생할 수 있던 오류를 최소화하는 데 결정적인 역할을 했습니다.
​
개발 과정 중 가장 큰 도전은 MFC 환경 적응이었습니다. 저는 main 함수가 없는 MFC의 독특한 프로그램 구조와 메시지 맵을 이해하는 데 많은 시간을 투자했습니다.
​
클라이언트 구현의 핵심 기여는 시스템의 응답성과 안정성 확보였습니다. 초기 구현에서 UI 이벤트 핸들러 내에서 서버 응답 대기 작업인 net.Receive를 호출했을 때, 클라이언트 애플리케이션이 멈추는(블로킹) 문제가 발생했습니다. 저는 이를 해결하기 위해 멀티스레딩을 도입했습니다. AfxBeginThread를 사용하여 Connect, Send, 그리고 무한 대기 가능성이 있는 Receive 작업을 UI 스레드와 분리된 별도의 작업 스레드로 완전히 옮겼습니다. 통신 결과는 사용자 정의 메시지(WM_USER)와 PostMessage를 통해 UI 스레드에 비동기적으로 안전하게 전달되도록 구조화했습니다. 이로써 서버 응답 지연에 관계없이 클라이언트의 GUI는 항상 사용자 입력에 반응하는 안정적인 비동기 통신 시스템을 성공적으로 구축했습니다.
​
이러한 기술적 성과와 더불어, 이번 프로젝트는 협업의 중요성을 다시 한번 확인시켜 주었습니다. Git 브랜치 관리 및 사전 합의된 규칙을 팀 전체가 일관되게 준수한 덕분에, 이전 프로젝트에서 겪었던 소통 및 코드 통합 문제를 효과적으로 해소할 수 있었습니다. 이번 경험을 통해 저는 기술 역량뿐만 아니라 체계적인 소통 능력이 성공적인 프로젝트 완성에 필수적임을 깨달았습니다.

1. 수정문서

1) 테이블 명세서, ERD

 

2) 목업

 
 
 

​2. 구현 스크린샷 및 설명


3. 소스코드

https://github.com/mmmmz986/MFC_Project

 

GitHub - mmmmz986/MFC_Project: [LMS7] MFC프로젝트_2팀

[LMS7] MFC프로젝트_2팀. Contribute to mmmmz986/MFC_Project development by creating an account on GitHub.

github.com

 

'C++ > Project' 카테고리의 다른 글

[LMS7 24/28주차] 1024 MFC 프로젝트, "CanSCan" 개발계획서  (0) 2026.05.06
[LMS7 16/26주차] 0826 [제60회 전국기능경기대회] 전시 작품 제작 프로젝트, "스마트홈" 완료 보고서  (0) 2025.11.11
[LMS7 16/26주차] 0826 [제60회 전국기능경기대회] 전시 작품 제작 프로젝트, "스마트홈" 개발 계획서  (0) 2025.11.11
[LMS7 14/28주차] 0812 Qt 개인 프로젝트, 라이어 게임 완료 보고서  (0) 2025.09.04
[LMS7 14/28주차] 0812 Qt 개인 프로젝트, "라이어게임" 개발 계획서  (6) 2025.08.17
'C++/Project' 카테고리의 다른 글
  • [LMS7 24/28주차] 1024 MFC 프로젝트, "CanSCan" 개발계획서
  • [LMS7 16/26주차] 0826 [제60회 전국기능경기대회] 전시 작품 제작 프로젝트, "스마트홈" 완료 보고서
  • [LMS7 16/26주차] 0826 [제60회 전국기능경기대회] 전시 작품 제작 프로젝트, "스마트홈" 개발 계획서
  • [LMS7 14/28주차] 0812 Qt 개인 프로젝트, 라이어 게임 완료 보고서
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
[LMS7 24/28주차] 1024 MFC 프로젝트, "CanSCan" 완료 보고서
상단으로

티스토리툴바