5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

画像ファイルに指定した物体が何個映っているのかを数える処理を自動化してみた

Last updated at Posted at 2021-08-03

参考サイト

次のウェブサイトが、一部でバズっているようです。

次の手順で、読み込んだ画像ファイルに、指定した物体が何個映っているのかを数える処理を、数行のお手軽コーディングで行えることが、話題になっていました。

( 作業手順 )

  • 画像ファイルに物体検出モデルを適用する
  • 返り値として、検出物体ラベルとその座標位置と検出確信度を得る
  • 指定した文字列のラベルが、検出物体ラベルが収められた配列リストに、何回出現したかを、カウントする

上の記事に掲載されているコードのうち、上の3つのステップが実装されている部分を抜粋し他のが、以下になります。

image = cv2.imread(file_name)
bbox, label, conf = cv.detect_common_objects(image)

 省略 

print('Number of cars in the image is '+ str(label.count('car')))

裏側では、cvlibモジュールを使っています。

- [cvlib, A simple, high level, easy to use, open source Computer Vision library for Python.](https://www.cvlib.net/)

今回、この処理を、スクリプト・ファイルにしてみました。

### 作成したスクリプト・ファイル

```Python3:image_object_count.py
import argparse   
import cv2
import matplotlib.pyplot as plt
import cvlib as cv
import datetime
from cvlib.object_detection import draw_bbox

parser = argparse.ArgumentParser(description='')  
# 読み込む画像ファイルのファイル名を、コマンドライン引数から受け取る
parser.add_argument('-file')  
# 関心対象の物体ラベル名を、コマンドライン引数から受け取る
parser.add_argument('-label')  

args = parser.parse_args() 
file_name = str(args.file)
label_name  = str(args.label)

image = cv2.imread(file_name)
bbox, label, conf = cv.detect_common_objects(image)
output_image = draw_bbox(image, bbox, label, conf)
plt.imshow(output_image)

# dt_now = datetime.datetime.now()
message = "{0}の検出数:{1}".format(label_name, str(label.count(label_name)))
print(message)

# https://www.relief.jp/docs/python-get-string-before-specific-character.html

output_file_name = "[解析済]ファイル名_{0}_{1}の検出数_{2}個.jpg".format(file_name.split('.')[0], label_name, str(label.count(label_name)))
print(output_file_name)
plt.imsave(output_file_name, output_image)

動作検証の結果

数え漏れが、多かったです。

この辺りは、物体検出モデルの認識精度を改善することで、解決されるはず。:football:

( コード実行後の作業フォルダの景色 )

スクリーンショット 2021-08-04 0.39.48.png

  • ( 入力画像 )

nogizaka_46.jpg

nogizaka_46.jpg

  • ( 検出対象の物体ラベル名 )

person

Terminal
electron@diynoMacBook-Pro image_object_count % python3 image_object_count.py -file nogizaka_46.jpg -label person
personの検出数:12
[解析済]ファイル名_nogizaka_46_personの検出数_12個.jpg
electron@diynoMacBook-Pro image_object_count %
  • ( 出力画像 )

[解析済]ファイル名_nogizaka_46_personの検出数_12個.jpg

続けて、他の画像で、personの(人)数カウントをやってみる

  • ( 入力画像 )

cabinet_members.jpg

cabinet_members.jpg

  • ( 検出対象の物体ラベル名 )

person

Terminal
electron@diynoMacBook-Pro image_object_count % python3 image_object_count.py -file cabinet_members.jpg -label person
personの検出数:13
[解析済]ファイル名_cabinet_members_personの検出数_13個.jpg
electron@diynoMacBook-Pro image_object_count %
  • ( 出力画像 )

[解析済]ファイル名_cabinet_members_personの検出数_13個.jpg

同じ画像で、tieの(本)数カウントをやってみる

Terminal
electron@diynoMacBook-Pro image_object_count % python3 image_object_count.py -file cabinet_members.jpg -label tie   
tieの検出数:18
[解析済]ファイル名_cabinet_members_tieの検出数_18個.jpg
electron@diynoMacBook-Pro image_object_count %
  • ( 出力画像 )

[解析済]ファイル名_cabinet_members_tieの検出数_18個.jpg

さらに他の画像で、carの(台)数カウントをやってみる

  • ( 入力画像 )

test.jpg

test.jpg

  • ( 検出対象の物体ラベル名 )

car

Terminal
electron@diynoMacBook-Pro image_object_count % python3 image_object_count.py -file test.jpg -label car   
carの検出数:6
[解析済]ファイル名_test_carの検出数_6個.jpg
electron@diynoMacBook-Pro image_object_count %
  • ( 出力画像 )

[解析済]ファイル名_test_carの検出数_6個.jpg

同じ画像で、personの(人)数カウントをやってみる

  • ( 入力画像 )

test.jpg

  • ( 検出対象の物体ラベル名 )

human

Terminal
electron@diynoMacBook-Pro image_object_count % python3 image_object_count.py -file test.jpg -label person
personの検出数:15
[解析済]ファイル名_test_personの検出数_15個.jpg
electron@diynoMacBook-Pro image_object_count %
  • ( 出力画像 )

[解析済]ファイル名_test_personの検出数_15個.jpg

ディレクトリの中身

Terminal
electron@diynoMacBook-Pro image_object_count %  ls
[解析済]ファイル名_cabinet_members_personの検出数_13個.jpg
[解析済]ファイル名_cabinet_members_tieの検出数_18個.jpg
[解析済]ファイル名_nogizaka_46_personの検出数_12個.jpg
[解析済]ファイル名_test_carの検出数_6個.jpg
[解析済]ファイル名_test_personの検出数_15個.jpg
cabinet_members.jpg
image_object_count.py
nogizaka_46.jpg
test.jpg
electron@diynoMacBook-Pro image_object_count % 

めざせCanonの人数集計精度 !

産業応用レベルでの物体自動カウント・ツールに使えそうな、物体検出器は、かなり優れた認識精度に到達しています。

Canonの群集カウント技術は、以下のように一人一人の人間のサイズが小さい群集の人数を自動集計できるみたいです。

スクリーンショット 2021-08-04 1.00.21.png

また、街中の人物(監視)AIで、しばしばTVに取り上げられる中国・Sensetimeからは、次の論文が出ています。

スクリーンショット 2021-08-04 1.06.02.png

5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?