Skip to content

kookjd7759/Video-analysis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Video-analysis

크레인 작업 환경에서 영상/센서 데이터를 통합해 사람 감지 + 거리 추정 + 위험 데이터 전송을 수행하는 Python 프로젝트입니다.
RealSense 기반 영상 분석, Modbus/UDP 센서 수집, MQTT 송수신, 웹 대시보드를 하나의 프로세스에서 동작시킵니다.

1. 주요 기능

  • RealSense + YOLO 기반 사람 검출 및 거리 추정
  • Flask 웹 대시보드 제공
  • /video_feed 실시간 영상 스트리밍(MJPEG)
  • /radar.png 객체 위치/거리 레이더 뷰
  • /info 감지 객체 JSON API
  • Modbus/UDP 기반 크레인/안전 센서 데이터 수집
  • MQTT 기반 CAN 기울기 데이터 수신
  • 통합 데이터를 이진 패킷(CRC32 포함)으로 MQTT 송신
  • mDNS(RadarServer._http._tcp.local) 광고

2. 동작 구조

입력 소스:

  • RealSense 카메라: 사람 검출용 컬러/깊이 영상
  • UDP(기본 5005): 안전 센서 데이터
  • Modbus RTU(/dev/ttyUSB0): 메인 크레인 데이터
  • MQTT 구독(Event/T-MDS/YJSensing/<MAC>/): 기울기(CAN) 데이터

공유 상태:

  • shared_state.py에서 스레드 안전(threading.Lock)으로 데이터 통합

출력:

  • Flask 서버(0.0.0.0:5000)
  • MQTT 발행(Event/CraneTest/, 바이너리 패킷)

3. 핵심 파일

  • main.py: 전체 시스템 진입점, 워커/서버/MQTT 시작 및 종료 처리
  • analysis.py: Flask 앱, 스트리밍/레이더/API 라우트, 백그라운드 캡처 루프
  • processor.py: YOLO + RealSense 추론 및 거리 계산
  • shared_state.py: 센서/검출 데이터 공용 메모리
  • koceti_worker.py: 안전/크레인 데이터 폴링 후 SharedState 갱신
  • koceti_Read_Modbus.py: UDP 수신 및 Modbus 서버 구성/데이터 파싱
  • Update_Can_Data.py: MQTT 수신 메시지에서 기울기 추출
  • transmit_Crane_Data_Worker.py: 통합 데이터 패킹 + CRC32 + MQTT 송신
  • Crane_MQTT.py: MQTT 연결/구독/발행 래퍼
  • send_ip.py: 장치 IP를 ntfy로 보고

참고/테스트 스크립트:

  • sim.py: 더미 바이너리 패킷 생성/전송
  • yoloPose_test.py: Pose 기반 거리 추정 실험
  • Test_modbus_server*.py, LMI_Comm_Test.py: Modbus 테스트 코드
  • PI_conn.py: SSH 업로드/원격 실행 보조 스크립트

4. 실행 환경

권장:

  • Python 3.10 이상
  • Linux/Raspberry Pi 환경
  • Intel RealSense 카메라(깊이 스트림 사용)
  • Modbus RTU 장치(/dev/ttyUSB0)

5. 설치

현재 requirements.txt에는 일부 패키지만 포함되어 있어, 아래처럼 추가 의존성을 함께 설치해야 합니다.

python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
pip install flask numpy opencv-python torch ultralytics pyrealsense2 paho-mqtt pymodbus zeroconf psutil onnxruntime

Windows(PowerShell) 예시:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -U pip
pip install -r requirements.txt
pip install flask numpy opencv-python torch ultralytics pyrealsense2 paho-mqtt pymodbus zeroconf psutil onnxruntime

6. 실행 방법

python main.py

기본 접속:

  • 대시보드: http://<장치IP>:5000/
  • 영상 스트림: http://<장치IP>:5000/video_feed
  • 객체 정보: http://<장치IP>:5000/info
  • 레이더 이미지: http://<장치IP>:5000/radar.png

7. HTTP API

GET /info

예시 응답:

{
  "count": 1,
  "objects": [
    {
      "label": "person",
      "distance": 3.42,
      "est_distance": 3.58,
      "bbox_w": 124,
      "bbox_h": 287,
      "center": 0.513
    }
  ]
}

GET /video_feed

  • MJPEG 스트리밍 응답

GET /radar.png

  • 최신 검출 결과를 레이더 형태의 PNG로 반환

POST /shutdown

  • 내부 종료용 라우트(main.py 종료 시 호출)

8. MQTT 송신 패킷 포맷(Event/CraneTest/)

transmit_Crane_Data_Worker.py 기준(리틀엔디안):

  1. uint32 total_len
  2. uint32 serial_len
  3. serial_len 바이트 장치 시리얼 문자열(UTF-8)
  4. 고정 데이터 블록 struct '<19f8i'
  5. uint32 crc32 (serial_len + serial + fixed_data 구간 기준)

고정 데이터 블록에는 붐 길이, 하중, 유압/엔진 정보, 각도, 객체 거리/개수, 위험도 등이 포함됩니다.

9. 주요 설정 포인트

  • main.py: Flask 포트(기본 5000), 워커 주기(koceti_worker=0.05s, Update_Can_Data=0.2s, transmit_Crane_Data_Worker=0.5s)
  • processor.py: 모델 기본값(yolo11n.pt), RealSense 스트림(640x360), Raspberry Pi 감지 시 FPS/추론 부하 자동 완화
  • Crane_MQTT.py: 브로커 주소/계정/구독 MAC 리스트 하드코딩
  • send_ip.py: ntfy 토픽 URL 하드코딩

10. 트러블슈팅

  • RealSense 프레임이 안 들어오면: 케이블(USB 3.x), 권한, pyrealsense2 설치, 카메라 연결 상태를 확인하세요.
  • /dev/ttyUSB0 접근이 실패하면: 포트명/권한(dialout 그룹 등)/배선을 확인하세요.
  • MQTT 수신/송신이 안 되면: 브로커 주소/포트/계정, 방화벽, 토픽명을 확인하세요.
  • 웹 접속이 안 되면: 장치 IP, 포트(5000), 같은 네트워크 여부를 확인하세요.

11. 보안 주의사항

  • 현재 코드에 MQTT 계정, SSH 로그인 정보(login.json) 등 민감 정보가 포함되어 있습니다.
  • 운영 환경에서는 반드시 외부 설정 파일 또는 환경 변수로 분리하고, 실제 자격 증명은 저장소에 커밋하지 마세요.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages