python openCV로 외부 IP cam 영상 제어(onvif)

프로그래밍 언어 2022. 11. 16. 15:28

이번에 일정 시간에 한 번씩 외부에 있는 영상을 사진으로 저장해야 하는 일이 생겼다.

 

다른 건 비용이 비싸서 최대한 저렴하게 알아본 결과

IP Cam + LTE모뎀으로 조합했다.

IP Cam은 7만원대, LTE모뎀은 16만원대?였나.. 요금제는 고정IP로 매월 3만원대....

더 싸게 할 수도 있긴하던데... 과제비 꿀꺽ㅋ

(카메라 더 비싼걸 살 걸 그랬다... 발열이 있네?;;)

 

 

 

우선 카메라 설정부터 하여 'ispy'라는 프로그램으로 PC에서 접속 확인을 했다.

아래는 셋팅 및 영상 확인 순서.

ID와 비번, 지금은 로컬 네트워크라 192대역으로 IP 입력함
이렇게 되면 완료

 

 

 

영상은 파이썬, openCV로 제어했다.

 

openCV는 알다시피

> pip install opencv-python

 

코드는 복붙이 정석이지..ㅋㅋㅋㅋ

import cv2
import datetime
import os


def writeVideo():
    #현재시간 가져오기
    currentTime = datetime.datetime.now()
   
    #RTSP를 불러오는 곳
    video_capture = cv2.VideoCapture('rtsp://userID:password12@192.168.100.98:554/stream1')
   
    # 웹캠 설정
    video_capture.set(3, 1280)  # 영상 가로길이 설정
    video_capture.set(4, 720)  # 영상 세로길이 설정
    fps = 12
    # 가로 길이 가져오기
    streaming_window_width = int(video_capture.get(3))
    # 세로 길이 가져오기
    streaming_window_height = int(video_capture.get(4))  
   
    #현재 시간을 '년도 달 일 시간 분 초'로 가져와서 문자열로 생성
    fileName = str(currentTime.strftime('%Y %m %d %H %M %S'))

    #파일 저장하기 위한 변수 선언
    path = f'C:\\Users\\USER\\Desktop\\Projects\\05 Sewage Level Meter\\SourceCode\\python\\Cam\\sourceCode\\{fileName}.avi'
   
    # DIVX 코덱 적용 # 코덱 종류 # DIVX, XVID, MJPG, X264, WMV1, WMV2
    # 무료 라이선스의 이점이 있는 XVID를 사용
    fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
   
    # 비디오 저장
    # cv2.VideoWriter(저장 위치, 코덱, 프레임, (가로, 세로))
    out = cv2.VideoWriter(path, fourcc, fps, (streaming_window_width, streaming_window_height))

    while True:
        ret, frame = video_capture.read()
        # 촬영되는 영상보여준다. 프로그램 상태바 이름은 'streaming video' 로 뜬다.
        cv2.imshow('streaming video', frame)
       
        # 영상을 저장한다.
        out.write(frame)
       
        # 1ms뒤에 뒤에 코드 실행해준다.
        k = cv2.waitKey(1) & 0xff
        #키보드 esc 누르면 종료된다.
        if k == 27:
            cv2.imwrite(f'C:\\Users\\USER\\Desktop\\Projects\\05 Sewage Level Meter\\SourceCode\\python\\Cam\\sourceCode\\shot.png', frame)
            break
    video_capture.release()  # cap 객체 해제
    out.release()  # out 객체 해제
    cv2.destroyAllWindows()

if __name__ == "__main__":
    writeVideo()

 

https://pcseob.tistory.com/25 (소스 참고. 감사합니다ㅋㅋ)

 

 

소스에서

video_capture = cv2.VideoCapture('rtsp://userID:password123@192.168.100.98:554/stream1')

이 부분의 주소를 ispy 사진 밑에서 두번째 란에 ID와 주소를 넣으면 된다.

 

 

실행 결과>

 

 

esc 키 누르면 끝나는 지점에 마지막 Frame을 png 파일로 저장했다.

일정 시간마다 접속해서 저장만 하면 끝ㅋ

 

설정

트랙백

댓글

nginX + waitress + django(python) 웹서비스 구축(Windows)

Web 2022. 10. 8. 11:14

python으로 짠 웹서비스를 구축하려고 한다.

Linux 환경에서 하는게 맞지만 편의상 윈도우에서 구축해 보려고 한다.

윈도우 환경 추천은 안한다;;

linux에서 자료는 많지만 윈도우는 잘 없었다... 없는 이유가... 추천 안한다ㅋㅋ

 

자료를 찾아보신 분들은 아실거지만 django로 바로 웹서비스를 구축하지 말라고

django 팀에서도 정식으로 말하고 있다. 자세한 것은 아래 정리를 너무 잘해주신 분꺼 링크가 있다.

https://uiandwe.tistory.com/1268

 

wsgi 종류 중에 윈도우에서 설치가 안되거나 까다로운게 많아서

손쉽게 할 수 있는 것을 찾아보니 waitress였다.

 

아래 내용은 nginX, waitress, django 설치 및 셋팅, 테스트 실행 까지이다.

 

 

--- nginX 설치

http://nginx.org/en/download.html

난 아직 잘 몰라서 Stable version을 받았다.

원하는 폴더에 압축을 풀고 실행 파일을 실행하면

아무 반응이 없을 것이다ㅋㅋ

웹을 키고 http://127.0.0.1 or http://localhost 를 치고 들어가 보자

아래 같이 뜨면 다음으로 ㄱㄱ

 

 

--- django, waitress 설치

다른 것과 환경이 엉키는 것을 방지해서 가상 환경을 구성하여 설치한다.

'cmd'를 켜고 작업 위치에 간다.

test 폴더에 가상 환경을 구축하고 실행했다.

> python -m venv test (가상환경 구성 명령어)
> cd test (test 폴더로 이동)
> cd Scripts (Scripts 폴더로 이동)
> .\activate (가상환경 실행)

 

여기까지 하면 아래와 같이 바뀐다.

 

이제 django, waitress 를 설치는 아주 쉽다.

에러만 안나면....

에러는.... 다른 곳을 참고하시길ㅜㅜ;

> pip install django

> pip install waitress

 

 

--- 셋팅

이제 셋팅을 하자. 이것도 아주 쉽다. 아래와 같이 진행할 것이다.

    1. django 프로젝트 생성 및 실행

    2. nginX 셋팅 후, 실행

 

1. django 프로젝트 생성

> mkdir Projects (Projects 폴더 생성)
> cd Projects (Projects 폴더로 이동)
> django-admin startproject firstSite (firstSite 라는 장로 프로젝트 생성)

 

한번 테스트를 django로 실행해 보면 아래와 같이 뜬다.

http://127.0.0.1:8000/ or http://localhost:8000/ 둘 중에 접속되면 굿

다음 실행을 위해 cmd창에 'Ctrl + C'를 눌러서 프로그램을 종료한다

 

 

이제 nginX와 연결해 줄 waitress로 실행.

waitress-serve --listen=*:8000 firstSite.wsgi:application (waitress로 실행)

--listen=(ip):(port) 이다.

--listen=*:8000 이면 모든 ip로 8000번 포트를 연다는 뜻이다.

 

firstSite.wsgi:application 은 firstSite 모듈? 안에 wsgi 안에 application을 실행인 것 같다.

dir로 폴더 리스트와 현재 위치가 보이듯 manage.py와 firstSite 폴더가 보이는 곳에서 실행해야 한다.

 

그리고 다시 http://127.0.0.1:8000/ or http://localhost:8000/ 둘 중에 접속되면 끝

 

 

2. nginX 셋팅 후, 실행

nginX 압축 푼 곳에 가서 conf 폴더에 들어가면

nginX.conf라는 파일이 있다.

메모장 같은 것으로 열고 아래와 같이 타이핑 해준다.

location / {
            proxy_pass  http://localhost:8000;
        }

 

위에 내용을 넣기 전에 반드시 빨강 박스 처럼 #를 붙여 주석 처리를 해준다.

그리고 다시 nginX를 실행시켜주면 끝ㅋ

혹시 전에 nginX를 종료한 적이 없으면

작업관리자 or cmd 창에서 해당 위치에서 'nginX -s stop' 명령을 줘서 종료 후 실행하길 바란다.

 

http://localhost or http://127.0.0.1로 접속해서 아래와 같이 뜨면 끝ㅋ

 

이제 python으로 마음껏 개발해 봅시다ㅋㅋㅋ

'Web' 카테고리의 다른 글

Django CSRF token 에러  (0) 2023.01.05
무료 SSL 인증 사이트. Let's Encrypt  (0) 2022.11.23

설정

트랙백

댓글

PLC 기초 1

PLC/LS Electic 2022. 2. 7. 15:49

--- PLC (Programable Logic Controller) : 프로그램 로직 제어기

 

--- 주요 브랜드

    LS Eletric(LS산전), 지멘스, 미쯔비시, AB, 파나소닉, 케인스, OMRON 등 많음

    우리나라에서는 미쯔비시, 지멘스, LS Electric 많이 사용한다고 함

    화자는 LS Electric을 사용함 (I love 국산)

 

--- LS Electric PLC 종류

    크게 규모와 프로그램 방식에 따라 나뉨

    먼저 규모로 XGT(복잡, 대형)와 XGB(간단, 소형)로 나뉨

 

    그 안에서 프로그램 방식에 따라

    국제표준 방식, 명령어? 방식으로 나뉨

 

    그 외로 구형(Glofa, Master-K)도 있지만 단종되었으니 언급하지 않겠으나

    아직 인기가 있어 대리점에서는 판매 중이라고 함

 

    아무래도 국제표준 방식을 익히면 다른 브랜드의 제품도 손 쉽게 할 수 있음

    But 화자는 명령어? 방식으로 하겠음 (I love 국산)

 

 

--- 프로그램 툴

    XG5000 : PLC 작성 프로그램

    XP-Builder : HMI 작화 툴 (화면 만들기~)

 

    LS ELECTRIC (ls-electric.com)

    요기 가서 검색하면 나옴. 다운 & 설치 ㄱㄱ

 

설정

트랙백

댓글