Ruby를 통해 이미지에서 텍스트 인식
글이 많은 그림은 몰라도 뜻을 상상해 보세요.그때는 어떻게 하면 좋을까?번역 도구를 이용하면 생각난다.번역을 하고 싶은데 어떻게 썼는지 모르기 때문에 그때는 그림에서 텍스트를 얻는 방법이 필요하다.
그래서 오늘은 Ruby에서 그림에서 문자를 식별하는 방법을 소개하려고 합니다.
이루어지다
ImageMagick
와 Tesseract
를 사용하여 이미지에서 텍스트를 식별합니다.ImageMagick: Rubi는 이미지 처리 도구입니다.
# インストール(MacOS)
brew install imagemagick
Tesseract: 옵티컬 문자 인식 텍스트 인식 도구를 사용합니다.현재 많은 언어를 지원합니다.# インストール(MacOS)
brew install tesseract
# training dataはどこで保存しているか確認するコマンド
brew list tesseract
training 데이터 폴더에 그림에서 텍스트를 식별하는 언어를 저장해야 합니다.이번에는 영어를 사용합니다eng.traineddata
.다른 언어를 사용할 때는 지원 언어를 참조하십시오.이미지에서 텍스트를 식별하려면
다음 그림에서 텍스트를 가져오려면
1. 이미지를 흑백(회색조)으로 변환
2단계와 3단계에서 사용하기 위해서는 먼저 이미지를 흑백으로 변환해야 한다.
require 'pathname'
require 'open3'
require 'mini_magick'
INPUT = '/Users/duong.nguyen/Desktop/input'.freeze # 元の画像を保存するフォルダ
OUTPUT = '/Users/duong.nguyen/Desktop/output'.freeze # 処理した画像を保存するフォルダ
Pathname.new(INPUT).children.each do |f|
src_path = f.realpath
tmp_path = "#{OUTPUT}/#{f.basename}"
img = MiniMagick::Image.open(src_path)
img.colorspace('Gray')
img.write(tmp_path)
end
위 코드를 실행하면 원래 이미지가 흑백으로 바뀝니다.처리된 이미지:
2. 이미지 클리닝
필요 없는 것을 없애기 위해 그림을 검은색으로 바꾼다.이것은
Tesseract
텍스트를 더욱 잘 식별하는 데 도움이 된다.# ...
Pathname.new(INPUT).children.each do |f|
# ...
MiniMagick::Tool::Convert.new do |magick|
magick << tmp_path
magick.negate
magick.threshold('007%')
magick.negate
magick << tmp_path
end
end
처리된 이미지:3. 텍스트 인식
tesseract
로 텍스트를 식별하고 open3
로 되돌아오는 텍스트capture
를 사용합니다.# ...
Pathname.new(INPUT).children.each do |f|
# ...
text, _xxx, _yyy = Open3.capture3("tesseract #{tmp_path} stdout -l eng --oem 0 --psm 3")
puts text.strip
end
인식된 텍스트We would all be
living there together.
모든 코드require 'pathname'
require 'open3'
require 'mini_magick'
INPUT = '/Users/duong.nguyen/Desktop/input'.freeze
OUTPUT = '/Users/duong.nguyen/Desktop/output'.freeze
Pathname.new(INPUT).children.each do |f|
# Step 1
src_path = f.realpath
tmp_path = "#{OUTPUT}/#{f.basename}"
img = MiniMagick::Image.open(src_path)
img.colorspace('Gray')
img.write(tmp_path)
# Step 2
MiniMagick::Tool::Convert.new do |magick|
magick << tmp_path
magick.negate
magick.threshold('007%')
magick.negate
magick << tmp_path
end
# Step 3
text, _xxx, _yyy = Open3.capture3("tesseract #{tmp_path} stdout -l eng --oem 0 --psm 3")
puts text.strip
end
끝맺다나는 정확한 텍스트 식별은 이미지의 종류에 따른 것이냐, 아니면 이미지의 청결이 좋은 것이냐 등에 따라 이루어진다고 생각한다.따라서 어떤 경우 위의 방법으로 문자를 식별할 수 없기 때문에 텍스트의 식별 수준이 완전히 정확하지 않다.
Ruby는 기본적으로 이미지를 통해 텍스트를 식별하는 절차입니다.
이미지를 처리해야 하는 경우에 유용했으면 합니다.
참조: https://aonemd.me/posts/extracting-text-from-images-using-ruby/
Reference
이 문제에 관하여(Ruby를 통해 이미지에서 텍스트 인식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/duong_nguyen/items/fa4b9bc7cb56ed2fb358텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)