Python/Python Project 01 - WebCam으로 이미지 찍어서 글 읽

Python Project 0-4 WebCam으로 이미지를 찍어서 글 읽기 마지막

우아지마야 2019. 7. 5. 12:40

안녕하세요. 그럼 이제 진짜 마지막으로 아까 다 마무리한 3단계의 코드를 합쳐서 프로젝트를 완성하겠습니다.

3단계가 있었습니다.

1.     WebCam을 이용해서 사진을 찍어서 사진으로 파일을 저장한다.

2.     사진에 있는 글을 읽어서 Text로 저장을 한다.

3.     Text를 읽어서 스피커로 출력을 한다.

다들 이렇게 3가지 단계를 마무리했다는 가정하에 시작하겠습니다.

유튜브와 마찬가지로 라즈베리파이와 웹켐(로지텍)을 이용해서 하려고 했는데, 라즈베리파이에 쓸 모니터와 키보드 마우스가 없어서 일단 노트북으로 하겠습니다. 죄송합니다

일단 main이 있는 파이선 파일을 만듭니다.

저 같은 경우는 main이 있는 폴더에 위에 만든 함수들을 넣었습니다. 다들 아시겠지만 전체적으로 코드가 길지 않기 때문에 한 파일에 다 넣고 구현을 해도 상관은 없습니다. 그냥 저는 함수 별로 나누는 게 보기 좋을 것 같아서 나눠서 저장을 했습니다.

import ReadText as RT

import TakePicViaWebCam as Web

import ImageToText as IT

import TakePicViaStreamingWebCam as SWeb

일단 위에처럼 입력을 해서 만든 3개의 함수가 있는 파일을 불렀습니다.

그리고 일단 시작을 한다는 의미로

print(“Start”)

를 넣었습니다.

그리고 함수가 하나하나 끝날 때마다 print를 넣어서 어디까지 진행이 되었는지 확인을 했습니다. (오류가 발생했을 때 어디서 오류가 생겼는지 쉽게 알 수 있기 때문입니다.)

아 그리고 TakePicViaWebCamStreaming이 없어서 불편했기 때문에 TakePicViaStreamingWebCam을 이용해서 Streaming을 하면서 알맞은 타이밍에 사진을 찍을 수 있게끔 바꿨습니다.

recent_filename = SWeb.TakePicViaWebCam()

이렇게 사진을 찍으면서 어떤 파일이름으로 저장했는지 Return을 해서 다음 ImageToText하는 함수에서 방금 찍은 사진을 Text 화하게 합니다.

혹시 모르니 파일 이름을 print를 하고 혹시 이름이 없는 경우에는 거기서 프로그램을 종료시킵니다.

print(recent_filename)

    if recent_filename == "No Name":

        print("No Text")

파일 이름이 존재하는 경우 이미지에서 Text를 찾아서 Text로 저장을 합니다. 마찬가지로 텍스트가 없는 경우에는 이미지 안에 텍스트가 없다고 하고 프로그램을 종료시킵니다.

       else:

        TextFromImage = IT.ImageToText(recent_filename)

        #Read Text

        print(TextFromImage)

        if TextFromImage == "":

            print("No Text In Image")

        else:

            RT.ReadTextFile(TextFromImage,recent_filename)

    print("End")

마지막으로 Text가 있는 경우에는 mp3파일로 저장을 해서 그것을 Play 해서 스피커에서 출력이 되게끔 합니다. 이렇게 해서 WebCam으로 사진을 찍어서 Text를 찾아서 읽는 프로그램을 만들었습니다. WebCam을 로직텍을 안 쓰고 노트북에 있는 것을 쓴 이유는 노트북에 있는 WebCam으로 찍은 사진들이 Text로 바꾸는데 오류가 적어서 노트북 웹켐을 이용했습니다. 아마도 좋은 웹켐을 쓰면 노트북 웹켐보다 좋은 효과를 볼 수 있을 겁니다.

여기까지 완료하신 분들이라면 하시면서 이상한 점을 발견할 겁니다. 이 프로그램이 사진에서 Text를 찾는 게 그렇게 완벽하지가 않습니다. 이 부분에 대해서는 제가 많이 아는 것은 없지만, 일단 사진을 preprocessing을 해서 Image에서 Text를 잘 찾을 수 있게끔 변형을 해야 합니다.

제가 한 것은 Color로 사진을 저장을 안 하고 Gray로 저장을 했습니다. 이렇게 하면 Text로 바꾸는데 실패하는 확률이 내려갑니다. Deep Learning을 배우신 분들이라면 더 좋게 Preprocessing을 하실 수 있을 겁니다.아 그리고 저는 사진 파일 저장을 현재시간을 이용했기 때문에 절대로 같은 이름을 가진 사진이 존재할 수 없습니다.

 

재미있게 봐주셔서 감사합니다. 다음에는 pygame을 이용해서 간단한 게임을 만드는 것을 하려고 합니다. 모니터, 키보드를 사야 라즈베리파이를 시작할 수 있을 것 같습니다.

 

제가 완성한 것도 같이 올리겠습니다. 꼭 이게 답이 아니고 이렇게도 할 수 있구나 정도로 참고하시면 될 것 같습니다.

제가 사용한 사진입니다. 이것을 Print해서 들고 Webcam으로 찍었습니다.

 

ImageToText.py
0.00MB
main.py
0.00MB
ReadText.py
0.00MB
TakePicViaStreamingWebCam.py
0.00MB
TakePicViaWebCam.py
0.00MB