지난 글)
쾅쾅쾅
누구세요~?
: D
오늘은 공부와 프로젝트 글을 적을 건데요
어떻게 공부하는데 뚱이가 나왔냐.. 함은!
바로
1 OpenCV
OpenCV
요것 때문.
"실시간 이미지 프로세싱에 중점을 둔 라이브러리"
라는데요. 이미지에 먼저 텍스트를 넣는 방법을 다시 되새김질 해보렵니다 (+ Tesseract API까지)
jupyter에서 공부했기 때문에.
!pip install opencv-python
import cv2
VScode에서는 터미널에서 요 opencv-python설치하면 되지 않을까.
암튼
요 뚱이 이미지를
import matplotlib.pyplot as plt
import cv2
# img 가져오기
img = cv2.imread("./data/patrick.jpg")
plt.imshow(img)
하시면 이 파란맛 뚱이가 나옵니다
분홍 어디갔니
사실 현재 BGR 형태로 출력이 된거라 색이 반전된 형태라고 배웠읍니다.
그렇기 때문에
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
를 돌려 보시면?
요 놈이 plt 그래프 형식으로 나옵니다
(역으로 RGB2BGR도 가능함)
이미지는 숫자 조합으로 표현되기 때문에 np형식으로 가져와진다는 사실
여기서 배움
여기서 글자를 넣는 법
- OPENCV는 한국어 지원 기능이 없기에, PIL(Python Image Library)로 바꿔서 거기서 한글로 바꾼 다음에 다시 OPENCV로 바꿔주기.
from PIL import ImageFont, ImageDraw, Image
# np --> PIL
img_pil = Image.fromarray(img)
# font는 ttc파일을 경로 설정 해야 함. 현재는 fonts라는 폴더에 gulin.ttc로 설정
font = ImageFont.truetype("fonts/gulim.ttc", 30) # 굴림폰트로 폰트 설정
# PIL 이미지를 그림
draw = ImageDraw.Draw(img_pil)
# 이미지에 텍스트 그리기
draw.text((X축, y축), "쓸 글자", ~~)
draw.text((125, 20), '뚱이', font=font, fill=(0,0,255,0))
# PIL --> np
img = np.array(img_pil)
plt.imshow(img)
plt.show()
를 하시면?
이마빡에 뚱이 쾅쾅
2 OCR
사진에서 문자를 읽어올 수 있다?
OCR (광학 문자 인식)
Tesseract API
인식률 높은 오픈소스 OCR 엔진 중 하나
한글뿐만 아니라 다양한 언어 지원
라고 배웠는데, 진짜 세상 신기
먼저 환경 구축부터 어려웠는데요
갓 키 독 스 에서 읽어서 환경변수를 등록한 담에!
테서랙트(Tesseract)
# 설치가 다 끝나고
# Jupyter환경에 설치
!pip install pytesseract
import pytesseract
하시면서 동시에
pytesseract를 구글링 후 설치한담에
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
이런식으로해서 tesseract.exe파일의 경로를 _cmd로 설정해주셔야 한다네요!
이후 예시로 실습을 진행하는데
사람 눈에는 쉽게 읽을 수 있는 텍스트가
사진속에서 다양한 색 속에 섞여있다면 컴퓨터는 구별을 못한다는 점.
그래서 이걸 흑백(binary로 변환)으로 전환한 다음에 tesseract를 사용한다면 추출이 가능하더라구요(신기)
img = cv2.imread("./image.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 흑백이미지 만들기.
img3 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 하지만 요 코드로 변환을 해도 흑백모드가 될 뿐 글자 인식은 어렵더라
그래서?
# 이진으로 이미지 변환 (이미지, 기준값, 기준 이상일 때 값 )
__, img3 = cv2.threshold(img3, 150, 255, cv2.THRESH_BINARY)
plt.xticks([]) #plt 그래프에서 ticks지우기
plt.yticks([]) #plt 그래프에서 ticks지우기
plt.imshow(img, cmap="gray")
plt.show()
절반 밖에 못읽는 이미지.
요기다가
# 이미지에서 pytesseract method를 통해 추출하는 법
text = pytesseract.image_to_string(img)
print(text)
라고 하면?
사실 프로젝트 하는데 요 놈을 너무 급하게 배워서 까먹을까봐 되새기려고 적었다는 점.
뭐 글 쓰는놈 맘이지~
3 프로젝트
일단 저는 프로젝트에서 크롤링으로 수집만 얼른 하고 머신 러닝으로 넘어갔는데요
안배운거 혼자 공부하고 구현하느라 굉장히 혼났습니다
하지만
먼저 LDA(Latent Dirichlet Allocation)
이 놈은 배운적도 없는데 chat-GPT(chat-God PreTrained Transformer의 약자 ㅎ)가 추천해주길래
한 번 공부 해봤는데 한글인데 이해 못하겠는 걸?
암튼 dirichlet 분포라는 걸 사용하는 모델..? 잘 모르겠어요. 산모양처럼 생긴 삼차원 그래프 9개가 막 빡빡이들처럼 왔다갔다 하는데
"한 마디로 학습된 데이터에서 디리클레 분포로 통해 토픽에 대한 연관어들을 추출한다"
라고 대충 이해했습니다.
그래서 커뮤니티 글제목들을 10000개 모아서
토픽 5개를 설정하면
토픽 1개당 연관된 단어들을 보여주더라구요.
다른 예시)
LDA에 내가 수집한 여러 버거가게의 레시피를 넣으면?
가장 맛있는(가장 연관된)
요런 이쁜이 버거 6개를 분류해준다. (component를 6으로 설정했을 경우.. 진지)
암튼 프로젝트에 썼던 머신러닝 공부는 다음에 쓰는 걸로
'아카이빙 > (구) 인사교 교육들' 카테고리의 다른 글
[ 2023 인사교 ] 머신러닝과 비지도학습 써먹어보기 (27) | 2024.11.21 |
---|---|
[ 2023 인사교 ] 딥러닝 공부 (1) | 2024.11.18 |
[ 2023 인사교 ] 안드로이드 intent (2) | 2024.11.18 |