MATLAB Answers

リアルタイムで撮影し​た画像から文字認識を​行い、画像を表示する

7 views (last 30 days)
竣 齊藤
竣 齊藤 on 8 Sep 2021
Commented: 竣 齊藤 on 19 Sep 2021
はじめに、PCのカメラを用いて成分表示が英語で記載されているものを撮影を行います。撮影した成分表示の画像の中に、添付した画像のwordの列の英単語があったとき、日本語訳とその日本語訳のイラストの画像を表示するプログラムを作成しています。
img = imread('使用写真.jpg');
results = ocr(img);
Ninshikimoji = lower(results.Words);
Ninshikiwaku = results.WordBoundingBoxes;
Jisho = readtable('allergy.xlsx','ReadRowNames',true);
word = categorical(Jisho.word);
Mininshiki = blanks(0);
for n = 1:size(Ninshikimoji,1)
if any(word == Ninshikimoji{n})
Shoukai = Jisho{Ninshikimoji{n},:};
% 追加箇所:ここから
img = insertObjectAnnotation(img,'rectangle',Ninshikiwaku(n,:),Shoukai{:},'font','Yu Gothic Bold');
%img = insertText(img,Ninshikiwaku(n,[1 2]),Shoukai{:},'font','fonts-japanese-gothic','AnchorPoint','LeftBottom');
x = Ninshikiwaku(n,1); y = Ninshikiwaku(n,2); w = Ninshikiwaku(n,3); h = Ninshikiwaku(n,4);
logo = imresize(imread([Shoukai{:} '.png']),0.3);
img((y-h):(y-h+size(logo,1)-1),(x+w):(x+w+size(logo,2)-1),:) = logo;
% 追加箇所:ここまで
else
Mininshiki = [Mininshiki ' ' Ninshikimoji{n}];
end
end
imshow(img);
現状は、前にMATLAB ANSWERSでご教授して頂き、すでに保存されている成分表示が英語で記載されている画像から、添付したExcelの画像のwordの列の英単語があった時に既存の写真内に日本語訳と日本語訳に対応するイラストの画像を表示するところまでは完了しました。
今回ご教授して頂きたい点は、すでに保存されている画像ではなく、リアルタイム撮影で取得した画像を用いてプログラムを実行するという点となります。
ご教授の程、よろしくお願い致します。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 8 Sep 2021
必要なToolboxは、Computer Vision Toolbox (既にocrで使っている) 、MATLAB Support Package for USB Webcamsです。
このドキュメントのプログラムを参考に(パクって)組み合わせるとこんな感じです。(動かせないのでデバッグしていません)
cam = webcam();
videoFrame = snapshot(cam);
frameSize = size(videoFrame);
videoPlayer = vision.VideoPlayer('Position', [100 100 [frameSize(2), frameSize(1)]+30]);
runLoop = true;
while runLoop
videoFrame = snapshot(cam);
results = ocr(videoFrame);
Ninshikimoji = lower(results.Words);
Ninshikiwaku = results.WordBoundingBoxes;
Jisho = readtable('allergy.xlsx','ReadRowNames',true);
word = categorical(Jisho.word);
Mininshiki = blanks(0);
for n = 1:size(Ninshikimoji,1)
if any(word == Ninshikimoji{n})
Shoukai = Jisho{Ninshikimoji{n},:};
videoFrame = insertObjectAnnotation(videoFrame,'rectangle',Ninshikiwaku(n,:),Shoukai{:},'font','Yu Gothic Bold');
x = Ninshikiwaku(n,1); y = Ninshikiwaku(n,2); w = Ninshikiwaku(n,3); h = Ninshikiwaku(n,4);
logo = imresize(imread([Shoukai{:} '.png']),0.3);
videoFrame((y-h):(y-h+size(logo,1)-1),(x+w):(x+w+size(logo,2)-1),:) = logo;
else
Mininshiki = [Mininshiki ' ' Ninshikimoji{n}];
end
end
step(videoPlayer, videoFrame);
runLoop = isOpen(videoPlayer);
end
clear cam;
release(videoPlayer);
  4 Comments
竣 齊藤
竣 齊藤 on 19 Sep 2021
ご教授して頂きありがとうございます。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!