天天看點

這些動物,你認識幾個呢?

簡 介: 昨天,參加第十七屆智能車競賽的同學給我發送了一段B站上的,無線充電車模的示範視訊: 開源開源,第十七屆智能車比賽博特電子節能小車,随便玩一玩吧。比賽還是卷不過你們。

關鍵詞

: 智能車競賽,動物識别,PaddleHub
graph LR
A1(動物識别) === A((文章目錄))
style A fill:#39f,stroke:#ccc,stroke-width:5px,color:#FFF
style A1 fill:#9f9,stroke:#3a3,stroke-width:2px
B11(智能車競賽<br>中動物識别) --- A1
A1 --- B12(PaddleHub一<br>鍵識别動物)
C121(初步測試) --- B12
style C121 fill:#ffffff,stroke:#777,stroke-width:1px
B12 --- C122(智能車競賽<br>動物集合)
style C122 fill:#ffffff,stroke:#777,stroke-width:1px
A((文章目錄)) === A2(無線充電)
style A2 fill:#9f9,stroke:#3a3,stroke-width:2px           

§01 動物識别

一、智能車競賽中動物識别

  在

第十六屆全國大學生智能車競賽

中的

室内視覺組

要求車模檢測到賽道傍邊的

标靶

根據标靶的内容(動物、水果)完成相應的動作。

這些動物,你認識幾個呢?

▲ 圖1.1 智能車在識别圖檔任務

  為了提高車模作品中視覺識别的精度要求,在

第十七屆智能車競賽 智能視覺組

則要求對于大類中的小類進行識别,也就是單片機中的軟體需要能夠完成對于動物、水果、交通工具中的子類别進行識别。由此對于視覺模型的精度要求大大提高了。

二、PaddleHub一鍵識别動物

  前天在百度的AI Studio 人工智能學習與石浔社群中看到了

PaddleHub一鍵動物識别

教學案例,展示了PaddleHub中定制打造的動物識别開源模型:

  支援一鍵完成動物識别,是用于拍照識别圖檔方面的應用。下面就測試一下這個開源網絡,看看去年智能車競賽組委會各個動物集合中究竟有幾種不同的動物種類。

1、初步測試

(1)安裝PaddleHub

  在Notebook中安裝 paddlehub。

!pip install paddlehub==1.6.2 -i https://pypi.tuna.tsinghua.edu.cn/simple           

(2)測試樣例圖檔

test_img_path = ["./1.JPG", "./2.JPG", "./3.JPG"]

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

for imgname in test_img_path:
    img1 = mpimg.imread(imgname)

    plt.figure(figsize=(10,10))
    plt.imshow(img1)

    plt.axis('off')
    plt.show()           
這些動物,你認識幾個呢?

▲ 圖1.1.1 大熊貓

這些動物,你認識幾個呢?

▲ 圖1.1.2 人臉圖檔

這些動物,你認識幾個呢?

▲ 圖1.1.3 北極狐

(3)樣例圖檔測試結果

 Ⅰ.測試代碼
#------------------------------------------------------------

import paddlehub as hub
module = hub.Module(name='resnet50_vd_animals')

#------------------------------------------------------------
import cv2

np_images = [cv2.imread(image_path) for image_path in test_img_path]
results = module.classification(images=np_images)

for r in results:
    printf(r)           
 Ⅱ.識别結果
{'國寶大熊貓': 0.9751655459403992}
{'非動物': 0.9993972778320312}
{'北極狐': 0.8418184518814087}           

2、智能車競賽動物集合

  在第16屆智能車鏡競賽智能視覺組中的動物集合中,主要有五類動物:狗、牛、貓、馬、豬。這些都是人類生活中常見到的動物,随着人類社會的發展,世界上培育出很多不同的品種。下面使用PaddleHub中的動物識别模型,來告訴我們這些動物的種類。

(1)測試代碼

from headm import *

import os

test_img_path = ["./1.JPG", "./2.JPG", "./3.JPG"]

cat_dir = '/home/aistudio/data/fruitanimal'
cat_num = 101

cat_img = [os.path.join(cat_dir, '%02d.jpg'%(i+1)) for i in range(cat_num)]

'''
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

for imgname in cat_img:
    img1 = mpimg.imread(imgname)

    plt.figure(figsize=(10,10))
    plt.imshow(img1)

    plt.axis('off')
    plt.show()

    break
'''

import paddlehub as hub
module = hub.Module(name='resnet50_vd_animals')

import cv2
np_images = [cv2.imread(image_path) for image_path in cat_img]

results = module.classification(images=np_images)

for r in results:
    printf(r)           

(2)識别結果

 Ⅰ.狗的識别結果
這些動物,你認識幾個呢?

▲ 圖1.2.1 狗的圖檔

  通過識别,可以看到總共101張圖檔,識别出狗的種類為35中,其中最多的兩個狗的品種為金毛犬、威爾士柯基。

序号 種類 個數
1 拉薩犬
2 日本柴犬 8
3 愛斯基摩犬
4 傑克羅素梗
5 日本秋田犬
6 八哥犬 7
西高地白梗
威爾士柯基 14
9 拉布拉多
10 美系秋田犬
11 德牧 德國牧羊犬
12 塔馬斯卡犬
13 德國狐狸犬
中國藏獒
15 斯塔福鬥牛梗
16 羅威納犬
17 邊境牧羊犬
18 貴賓犬 貴婦犬
19 臘腸犬
20 聖伯納犬
21 非動物
22 吉娃娃犬
23 波士頓梗犬
24 阿拉斯加雪橇犬
25 大麥町
26 金毛犬
27 馬爾濟斯犬 瑪爾基斯犬
28 中華田園犬
29 哈士奇犬
30 法蘭西鬥牛犬
31 約克夏梗
32 拳師犬
33 比格獵犬
34 羅秦犬
35 卷毛比熊犬
{'日本秋田犬': 0.4390193223953247}
{'貴賓犬/貴婦犬': 0.7055565714836121}
{'金毛犬': 0.8339270949363708}
{'比格獵犬': 0.4970936179161072}
{'德國狐狸犬': 0.5624755620956421}
{'金毛犬': 0.6434336304664612}
......
{'金毛犬': 0.7351966500282288}
{'拉布拉多': 0.9914411306381226}
{'哈士奇犬': 0.5635216236114502}           
 Ⅱ.牛的識别結果
這些動物,你認識幾個呢?

▲ 圖1.2.2 牛的圖檔

  牛的圖檔集合中總共有93張圖檔,識别的種類為22中,最多的牛的種類為湘西黃牛。

印度野牛
白牦牛
乳牛
和牛
野山羊
南方牛
非洲水牛
德克斯特牛
麝牛
西門塔爾牛
秦川牛
高地牛
利木贊牛
犢牛
中國荷斯坦奶牛
瑞士褐牛
水牛
湘西黃牛
娟珊牛
爪哇野牛
牦牛
美洲野牛
{'印度野牛': 0.7731859087944031}
{'和牛': 0.34460482001304626}
{'中國荷斯坦奶牛': 0.4629508852958679}
{'中國荷斯坦奶牛': 0.4254103899002075}
{'中國荷斯坦奶牛': 0.395224004983902}
。。。。。。
{'利木贊牛': 0.2524842321872711}
{'非洲水牛': 0.5881295204162598}
{'美洲野牛': 0.6179811358451843}
{'犢牛': 0.2019311934709549}
{'西門塔爾牛': 0.10599607974290848}           
 Ⅲ.貓的識别結果
這些動物,你認識幾個呢?

▲ 圖1.2.3 貓的圖檔

  貓的圖檔總共有99張,識别的種類為37個。最多的兩個品種:家貓、虎斑貓。

紅色貓
曼切堪貓
挪威森林貓
日本貓
短毛貓
美國剛毛貓
家貓
豹貓
波斯貓
高地貓
茶杯貓
粉頭斑鸠
美國銀色短毛貓
絲毛狗
蘇格蘭折耳貓
中國狸花貓
奶牛貓
美國短毛貓
折疊貓
純種貓
緬因貓
科恩家貓
德文帝王貓
歐洲緬甸貓
虎斑貓
拉格多爾貓
英國短毛貓
孟買貓
土貓
乳黃色貓
西伯利亞貓
土耳其安哥拉貓
雪鞋貓
中華田園貓
科拉特貓
36 泰國暹羅貓
37 俄羅斯藍貓
{'家貓': 0.26924195885658264}
{'蘇格蘭折耳貓': 0.47249680757522583}
{'奶牛貓': 0.48933151364326477}
{'虎斑貓': 0.6846295595169067}
{'土耳其安哥拉貓': 0.16593654453754425}
{'豹貓': 0.6253762245178223}
。。。。。。
{'美國銀色短毛貓': 0.42112547159194946}
{'短毛貓': 0.35389307141304016}
{'美國剛毛貓': 0.43220415711402893}
{'美國剛毛貓': 0.4108104407787323}
{'紅色貓': 0.2033773958683014}           
 Ⅳ.馬的識别結果
這些動物,你認識幾個呢?

▲ 圖1.2.4 馬的照片

  馬的圖檔有95張,識别的種類為10種。其中最多的是駿馬。

伊犁馬
駿馬 77
阿帕盧薩馬
阿拉伯馬
蒙古馬
烏珠穆沁馬
迷你馬
矮種馬
頓河馬
汗血馬
{'駿馬': 0.6022858023643494}
{'駿馬': 0.950950562953949}
{'駿馬': 0.8656469583511353}
{'駿馬': 0.6158687472343445}
。。。。。。
{'駿馬': 0.5660824179649353}
{'蒙古馬': 0.3801785707473755}
{'駿馬': 0.5563110113143921}
{'駿馬': 0.4901660680770874}
{'駿馬': 0.9210300445556641}           
 Ⅴ.豬的識别結果
這些動物,你認識幾個呢?

▲ 圖1.2.5 豬的照片

  二師兄的圖檔有88張,識别的種類有14中。最多的為家豬、種豬。

家豬
特種野豬
長白豬
漢普夏豬
寵物豬
香豬
黑山豬
從江香豬
西猯
榮昌豬
種豬
二進制母豬
北京黑豬
小香豬
{'家豬': 0.5635786056518555}
{'香豬': 0.5747232437133789}
{'長白豬': 0.34550777077674866}
{'種豬': 0.32950359582901}
{'小香豬': 0.4352666139602661}
。。。。。。
{'家豬': 0.4807981252670288}
{'家豬': 0.6012528538703918}
{'家豬': 0.816167414188385}
{'家豬': 0.6905205845832825}
{'小香豬': 0.4659614562988281}           

§02 無線充電

  昨天,參加第十七屆智能車競賽的同學給我發送了一段B站上的,無線充電車模的示範視訊:

  

這些動物,你認識幾個呢?

▲ 圖1 部落客的電子小車

這些動物,你認識幾個呢?

▲ 圖2 車模在賽道上邊充電便運作

■ 相關文獻連結:

● 相關圖表連結:

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2021-12-13
#
# Note:
#============================================================

from headm import *

strid = 5

#------------------------------------------------------------
tspgetdopstring(-strid)
strall = clipboard.paste().split('\r\n')
#printf(strall)

#------------------------------------------------------------
namedim = []
for s  in strall:
    namedim.append(s.split("'")[1])

nameonly = list(set(namedim))
#printf(namedim)
printf(len(namedim))

printf('序号 種類 個數')
for id,n in enumerate(nameonly):
    num = namedim.count(n)
    printf('{:<4}{:10}{:3}'.format(id+1, n, num))





#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================           

繼續閱讀