[엑셀 VBA] Snippet - OCR: 이미지 파일을 텍스트 파일로 변환하기
Captcha 한번 VBA로 뚫어 보려다 별걸 다하게 됩니다.
tesseract라는 무료 OCR 프로그램이 있습니다.
웹상의 이미지를 다운 받아 문서로 바꿔주는 유용한 툴입니다.
GUI가 아닌 CMD창에서 명령어로 입력하는 방식인데,
이 부분을 VBA로 구현하면 text 파일로 변환해서 엑셀로 바로 가져 올수 있습니다.
일반 영문 이미지 파일은 거의 99프로 변환이 됩니다. 정작 Captcha에는 효과가 없습니다.
한글 이미지는 tesseract 홈페이지에 관련 된 내용이 있으니 참고 하시면 됩니다.
그리고 다른 폰트의 글자를 인식하기 위한 글자를 훈련시키는 방법도 있습니다.
그 데이터를 이용해서 변환도 가능합니다.
전체적인 로직
1. tesseract 다운 받기
https://github.com/tesseract-ocr/tesseract
위의 주소에 가서 다운/설치 하시면 됩니다.
설명이 많이 불친절해서 나름 연구를 좀 하셔야 합니다.
2. 웹 주소상의 이미지를 다운 받는 로직 구현하기
"URLDownloadToFile" 이라는 urlmon 윈도우즈 API를 이용합니다.
' https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ms775123(v=vs.85) #If VB7 Then Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As Long #Else Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" ( _ ByVal pCaller As Long, _ ByVal szURL As String, _ ByVal szFileName As String, _ ByVal dwReserved As Long, _ ByVal lpfnCB As Long _ ) As Long #End If Public Function downloadFile(url As String) As Boolean Dim captchaFolder As String: captchaFolder = ThisWorkbook.path & "\captcha\captcha.jpg" Dim result As String result = URLDownloadToFile(0, url, captchaFolder, 0, 0) If result = "0" Then MsgBox "successful in downloading the captcha file." Call captchaInterpret(captchaFolder) '이 부분에 대한 함수는 아래 3번에 있슴다 Else MsgBox "failed in downloading the captcha file." End If End Function
3. 다운 받은 이미지 파일을 text 파일로 변환하기
Public Function captchaInterpret(srcFile As String) As Boolean Dim tesseract As String, destFile As String Dim arg As String, captchaValue As String tesseract = "C:\Program Files\Tesseract-OCR\tesseract.exe" destFile = ThisWorkbook.path & "\captcha\captcha" arg = srcFile & " " & destFile & " --oem 1" 'Debug.Print arg Dim objShell As New Shell32.shell 'Call objShell.ShellExecute("C:\Program Files\Tesseract-OCR\tesseract.exe", "E:\captcha.png E:\captcha.txt") Call objShell.ShellExecute(tesseract, arg) Open destFile & ".txt" For Input As #1 Line Input #1, captchaValue Close #1 '한 줄을 위에서 읽어 들여 Dictionary에 담아 둔다. If dictPost.Exists("captchaValue") Then Call dictPost.Remove("captchaValue") dictPost.Add "captchaValue", captchaValue captchaInterpret = True End Function
위의 소스는 제 프로젝트의 일부분이라, 본인에 맞게 Path라던가, 파일 이름, 출력 방법 등을 수정 하셔야 합니다.
결론: Captcha를 판독하는데는 실패 했지만, 다른 이미지로 된 문서를 판독하는데는 매우 훌륭합니다. 따라서 대규모 문서 스캔을 한 이후 이를 텍스트로 변환하는 유로 툴이 없는 경우 훌륭한 대안이 될 것이라 생각합니다.
번호 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
[📚교재 출간 안내] 「진짜쓰는 실무엑셀」 , 드디어 출간되었습니다! (179)
![]() ![]() |
![]() ![]() |
2022.02.03 | 469 | 184708 | |
공지사항 |
[VBA] 구하라 그러면 주어질 것이다. - VBA 마스터 E-Book (영문판)
![]()
dra****
|
2022.07.19
|
추천 10
|
조회 771
|
![]() |
2022.07.19 | 10 | 771 |
45662 |
선택된 범위 정렬 단축키
(20)
![]() |
![]() |
2022.12.15 | 5 | 521 |
44293 |
[엑셀 VBA] 예약 DB - 9. 시트의 바우처&견적서 양식에 데이터 뿌리기
(15)
![]() |
![]() |
2022.11.11 | 4 | 888 |
![]()
blue_0313
|
2023.03.21
|
추천 0
|
조회 69
|
blue_0313 | 2023.03.21 | 0 | 69 | |
44227 |
[엑셀 VBA] 예약 DB - 8. Listbox 와 폼 컨트롤 연동하고 DB로 보내기
(1)
![]() |
![]() |
2022.11.09 | 3 | 566 |
44219 |
[엑셀 VBA] 예약 DB - 7. MySQL 클래스와 사용법
(3)
![]() |
![]() |
2022.11.09 | 2 | 513 |
43438 |
[엑셀 VBA] 예약 DB - 6. 폼 콘트롤과 DB 필드명 일치시키기
![]() |
![]() |
2022.10.21 | 2 | 310 |
43292 |
[엑셀 VBA] 예약 DB - 5. makeSQL() 함수 - INSERT, UPDATE문 자동 생성
(7)
![]() |
![]() |
2022.10.18 | 3 | 532 |
43091 |
[엑셀 VBA] 예약 DB - 4. 표 가지고 놀기
(17)
![]() |
![]() |
2022.10.13 | 1 | 694 |
43017 |
[엑셀 VBA] 예약 DB -3. 표(테이블, ListObject)을 사용해야 하는 이유1
(15)
![]() |
![]() |
2022.10.11 | 2 | 578 |
42998 |
[잡설] 엑셀이 웹으로 가야하는 이유2
(11)
![]() |
![]() |
2022.10.10 | 5 | 826 |
![]()
tin
|
2023.01.12
|
추천 0
|
조회 161
|
tin | 2023.01.12 | 0 | 161 | |
42982 |
[엑셀 VBA] 예약 DB - 2. 다시 웹으로 - Access에서 MySQL로 데이터 이식
![]() |
![]() |
2022.10.10 | 2 | 394 |
40590 |
[엑셀 VBA] 예약 DB - 1. 엑세스, SQL, Recordset, ListObject 의 상관 관계
(9)
![]() |
![]() |
2022.07.29 | 3 | 673 |
![]()
tin
|
2023.01.12
|
추천 0
|
조회 107
|
tin | 2023.01.12 | 0 | 107 | |
40511 |
[잡설] 엑셀의 꽃 파워 쿼리를 버리다.
(5)
![]() |
![]() |
2022.07.29 | 5 | 1151 |
40321 |
[경험담..해결했습니다.] &H80004005(-2147467259)시스템오류
(4)
![]() |
![]() |
2022.07.25 | 2 | 730 |
40074 |
M365 업데이트 이후 발생하는 H80004005 (-2147467259) 자동화 오류 해결방법
![]() ![]() |
![]() ![]() |
2022.07.23 | 1 | 511 |
39608 |
엑셀 그래프에 관한 유튜브 채널정보 입니다.
(16)
![]() |
![]() |
2022.07.15 | - | 394 |
36473 |
[엑셀VBA] 시트 이름을 변수로 설정하고 싶을때 간단한 방법
(3)
![]() |
![]() |
2022.06.27 | 2 | 1705 |
35196 |
Print_Area 동적 인쇄 영역설정
![]() ![]() |
![]() |
2022.06.21 | 4 | 1796 |
34607 |
셀레니움으로 개별공시지가 조회
![]() ![]() |
![]() |
2022.06.02 | 2 | 451 |
26273 |
엑셀 2021, M365 가로스크롤 기능
(39)
![]() ![]() |
![]() ![]() |
2022.01.23 | 17 | 1294 |
![]()
김학동
|
2022.01.23
|
추천 1
|
조회 351
|
김학동 | 2022.01.23 | 1 | 351 | |
![]()
김동희
|
2022.05.30
|
추천 0
|
조회 200
|
김동희 | 2022.05.30 | 0 | 200 | |
24189 |
[엑셀 VBA] Snippet - OCR: 이미지 파일을 텍스트 파일로 변환하기
(28)
![]() |
![]() |
2021.12.01 | 8 | 3509 |
![]()
tin
|
2023.01.12
|
추천 0
|
조회 90
|
tin | 2023.01.12 | 0 | 90 |
@dra**** 님 captcha가 막는 대상이 봇이라 문자만 있는 captcha라고 해도 ocr로는 뚫기가 어렵겠죠.. 하지만 이 코드는 매우매우 유용합니다 shell을 응용하면 다른 exe에도 적용할 수 있을듯
@dra**** 님 대박자료입니다
테서렉트를 cmd로 실행할수도 있네요. 라이브러리가 없어도 이런식으로 구현할 수 있다니 놀랍습니다 ㅎㅎ
이제 실행파일이랑 내부적으로 cmd 실행만 제공되면 여러가지로 활용할 수 있겠네용
대량으로 이미지 텍스트로 변환할 때 매우 유용할 듯 합니다. ^^
@dra**** 님 하나도 모르겠어요..ㅜㅜ 코딩 언어인가요?
@dra**** 님 감사합니다!
@dra**** 님 유용하게 사용하겠습니다.
이미지 다운로드 하지 않고도 이미지 소스를 tesseract 에 바로 넣어도 잘 작동하네요^^
좋은 정보 감사합니다~!
@dra**** 님 굿굿 고맙습니다
@dra**** 님 오! 한번 해보고 싶어요
@dra**** 님 감사합니다.
@dra**** 님 감사합니다.
@dra**** 님 엑셀의 세계란..너무힘드네요 ㅎㅎ 더열심히 공부하겠습니다.
@dra**** 님 다음에 시간 있으면 한번 연습해봐야겠네요~!ㅎㅎ
캡챠에는 무용이라는 점이 아쉽지만.. 그래도 무료로 OCR 되는게 어딥니꽈~^^ㅎㅎ
@dra**** 님 어려운 부분이고 취약한 곳이지만 열공모드 진입합니다.
@dra**** 님 감사합니다.
@dra**** 님 감사^^
@dra**** 님 좋은 정보 감사합니다!
@dra**** 님 감사^^
@dra**** 님 좋은 정보 감사합니다!
@dra**** 님 좋은 정보 감사합니다.
@dra**** 님 감사 합니다.
@dra**** 님 역시 엑셀의 세계는 심오하군요... ㅠ_ㅜ
@dra**** 님 이건 뭐죠?
@dra**** 님 감사드립니다.
@dra**** 님 감사합니다.
@dra**** 님 엑셀로..ㅎㄷㄷ
@dra**** 님 와우....정말 감사합니다.
@dra**** 님 감사합니다.
@dra**** 님 감사합니다~^^