放棄機器學習,Python 如何進行物體檢測?

2021-01-07 CSDN

學習在不使用機器學習或任何框架的情況下,如何在Python中進行物體檢測。

作者 | Ravindu Senaratne

譯者 | 彎月,責編 | 屠敏

頭圖 | CSDN 下載自視覺中國

以下為譯文:

每當我們聽說「物體檢測」時,就會想到機器學習和各種不同的框架。但實際上,我們可以在不使用機器學習或任何其他框架的情況下進行物體檢測。在本文中,我將向你展示如何僅使用Python進行操作。

首先,我們定義一個模板圖像(或者叫模板物體),然後程序將在源圖像中查找與我們選擇的模板匹配的所有其他物體。舉例來說明一下。下面有兩張圖片,上面是飛機的源圖像,下面是模板照片,其中的物體為飛機。

下面我們來編寫python代碼,圈出源圖像中所有匹配模板圖像的區域。

首先,我們來檢測一個物體。然後再調整代碼實現多個物體的檢測。

檢測一個物體:最準確的那個物體

我們需要一個源圖像和一個模板圖像。模板圖像在源圖像上滑動(像2D卷積有一樣),然後程序將嘗試找到最準確的匹配項。

下面我們開始寫代碼。

import cv2import numpy as npfrom matplotlib import pyplot as pltimg_rgb = cv2.imread('SourceIMG.jpeg')img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)template = cv2.imread('TemplateIMG.jpeg', 0)

在上述代碼中,我們使用OpenCV讀取SourceIMG.jpeg和TemplateIMG.jpeg。

height, width = template.shape[::]

模板圖像會在整個源圖像上滑動,對整個區域進行搜索(將左上角作為參考框)。模板圖像與源圖像匹配後,我們記下左上角的位置,然後在實際匹配的區域周圍繪製一個框。為此,我們需要知道此模板圖像的高度和寬度。下面我們來繪製矩形。

res = cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF)

模板匹配是OpenCV提供的功能,它利用源圖像和模板圖像的灰度圖像,計算我們需要的統計指標。這裡我使用的是最小平方差(TM_SQDIFF),因為我們尋找的是模板圖像和源圖像之間的最小差。

plt.imshow(res, cmap='gray')

如果將到目前為止的結果繪製成圖,就會得到一個概率圖。從下圖可以看到,這些小點是模板實際匹配的位置。

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

我們可以使用上面的代碼從概率圖中找出小點的位置。然後使用minMaxLoc(res)提取最小值、最大值、最小值的位置和最大值的位置。

top_left = min_loc bottom_right = (top_left[0] + width, top_left[1] + height)cv2.rectangle(img_rgb, top_left, bottom_right, (255, 0, 0), 2)

為了在模板圖像匹配的源圖像上繪製一個藍色矩形,我們需要獲得最小值的位置min_loc(該位置為匹配開始的位置)作為左上角。同樣,我們可以通過top_left[0] + width和top_left [1] + height獲得右下角。通過這些尺寸,我們可以使用cv2.rectangle繪製藍色矩形。

一切準備就緒,下面我們進行可視化。

cv2.imshow("Matchedimage", img_rgb)cv2.waitKey()cv2.destroyAllWindows()

完整的代碼:

import cv2import numpy as npfrom matplotlib import pyplot as pltimg_rgb = cv2.imread('SourceIMG.jpeg')img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)template = cv2.imread('TemplateIMG.jpeg', 0)height, width = template.shape[::]res = cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF)plt.imshow(res, cmap='gray')min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)top_left = min_loc #Change to max_loc for all except for TM_SQDIFFbottom_right = (top_left[0] + width, top_left[1] + height)cv2.rectangle(img_rgb, top_left, bottom_right, (255, 0, 0), 2) cv2.imshow("Matched image", img_rgb)cv2.waitKey()cv2.destroyAllWindows()

檢測多個物體:在給定閾值下進行檢測

上述我們已經完成了單個物體的檢測,即選擇源圖像和模板圖像之差的最小值。通過定義閾值的方法,我們可以檢測所有與模板圖像相似的物體。

為此,我將使用與上例相同的源圖像和模板圖像,並設置閾值為概率大於0.5(你可以查看res數組來確定閾值)。我們只需要更改幾行代碼即可檢測多個物體。

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)

在這裡,我使用TM_CCOEFF_NORMED,因為我們需要獲取最大值,而不是最小值。這意味著我們需要尋找多個物體而不是一個。

threshold = 0.5 #For TM_CCOEFF_NORMED, larger values means good fitloc = np.where( res >= threshold)

我們要查找所有大於閾值的位置值。loc接收2個輸出數組,並將這些數組組合在一起,這樣就可以獲得x,y坐標。

forptinzip(*loc[::-1]):cv2.rectangle(img_rgb, pt, (pt[0] + width, pt[1] + height), (255, 0, 0), 1)

這裡有多個位置。因此,我們需要針對所有位置繪製藍色矩形。下面我們來進行可視化。

完整的代碼:

import cv2import numpy as npfrom matplotlib import pyplot as pltimg_rgb = cv2.imread('SourceIMG.jpeg')img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)template = cv2.imread('TemplateIMG.jpeg', 0)height, width = template.shape[::]res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)plt.imshow(res, cmap='gray')threshold = 0.5 #For TM_CCOEFF_NORMED, larger values = good fit.loc = np.where( res >= threshold) for pt in zip(loc[::-1]): cv2.rectangle(img_rgb, pt, (pt[0] + width, pt[1] + height), (255, 0, 0), 1) cv2.imshow("Matched image", img_rgb)cv2.waitKey()cv2.destroyAllWindows()

看起來很簡單吧?但是如果我們使用機器學習或框架,則可以達到更高的準確性。

感謝您的閱讀,希望本文對您有所幫助。

原文:https://towardsdatascience.com/object-detection-on-python-using-template-matching-ab4243a0ca62

本文為 CSDN 翻譯,轉載請註明來源出處。

相關焦點

  • 放棄機器學習框架,如何用Python做物體檢測?
    」時,就會想到機器學習和各種不同的框架。但實際上,我們可以在不使用機器學習或任何其他框架的情況下進行物體檢測。在本文中,我將向你展示如何僅使用Python進行操作。首先,我們定義一個模板圖像(或者叫模板物體),然後程序將在源圖像中查找與我們選擇的模板匹配的所有其他物體。舉例來說明一下。下面有兩張圖片,上面是飛機的源圖像,下面是模板照片,其中的物體為飛機。
  • 放棄機器學習框架,如何用 Python 做物體檢測?
    (給Python開發者加星標,提升Python技能)來源:CSDN每當我們聽說「物體檢測」時,就會想到機器學習和各種不同的框架
  • 使用模板匹配在Python上進行對象檢測!(附代碼)
    了解如何在沒有機器學習或任何框架的情況下在Python上進行對象檢測每當我們聽說「 對象檢測 」時,我們就會想到機器學習以及不同的框架。但是我們實際上可以在不使用機器學習或任何其他框架的情況下進行對象檢測。在本文中,我將向您展示如何僅使用Python進行操作。
  • 跟著吳恩達老師學習機器學習,Python筆記分享!
    但是多項式回歸能夠更精準地找出輸入變量和輸出變量之間的關係,甚至是在這個關係不是線性的時候、手擼python多項式回歸對數回歸(羅吉斯回歸)對數回歸是在線性回歸基礎上開發的。他也用到了同一個簡單的直線方程。這就是一個廣泛使用的、強大的、流行的機器學習算法了。這可以用來預測分類變量。以下文章逐步解釋了對數回歸用於二分類問題的開發過程。
  • Python機器學習·微教程
    在這個教程裡,你將學會:如何處理數據集,並構建精確的預測模型使用Python完成真實的機器學習項目這是一個非常簡潔且實用的教程,希望你能收藏,以備後面複習!接下來進入正題~這個微課程適合誰學習?如果你不符合以下幾點,也沒關係,只要花點額外時間搞清楚知識盲點就能跟上。所以這個教程既不是python入門,也不是機器學習入門。
  • Python大數據綜合應用 :零基礎入門機器學習、深度學習算法原理與案例
    共4天8節,講解機器學習和深度學習的模型理論和代碼實踐,梳理機器學習、深度學習、計算機視覺的技術框架,從根本上解決如何使用模型、優化模型的問題;每次課中,首先闡述算法理論和少量公式推導,然後使用真實數據做數據挖掘、機器學習、深度學習的數據分析、特徵選擇、調參和結果比較。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    共4天8節,講解機器學習和深度學習的模型理論和代碼實踐,梳理機器學習、深度學習、計算機視覺的技術框架,從根本上解決如何使用模型、優化模型的問題;每次課中,首先闡述算法理論和少量公式推導,然後使用真實數據做數據挖掘、機器學習、深度學習的數據分析、特徵選擇、調參和結果比較。
  • python機器學習預測分析核心算法.pdf
    本書通過集中介紹兩類可以進行有效預測的機器學習算法,展示了如何使用Python 程式語言完成機器學習任務,從而降低機器學習難度,使機器學習能夠被更廣泛的人群掌握。  作者利用多年的機器學習經驗帶領讀者設計、構建並實現自己的機器學習方案。本書儘可能地用簡單的術語來介紹算法,避免複雜的數學推導,同時提供了示例代碼幫助讀者迅速上手。
  • 機器學習實戰:Python信用卡欺詐檢測
    對信用卡交易數據建立檢測模型,使用Python庫進行預處理與機器學習建模工作,代碼通俗易懂。包括數據預處理與清洗,模型調參與評估等詳細數據分析與建模流程。故事背景與Python環境故事背景:原始數據為個人交易記錄,但是考慮數據本身的隱私性,已經對原始數據進行了類似PCA的處理,現在已經把特徵數據提取好了,接下來的目的就是如何建立模型使得檢測的效果達到最好,這裡我們雖然不需要對數據做特徵提取的操作,但是面對的挑戰還是蠻大的
  • 《Python 機器學習》-Python Machine Learning(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • Python相關機器學習'武器庫'
    Github主頁:https://github.com/grangier/python-goose二、Python文本處理工具集從網頁上獲取文本數據之後,依據任務的不同,就需要進行基本的文本處理了,譬如對於英文來說,需要基本的tokenize,對於中文,則需要常見的中文分詞,進一步的話,無論英文中文,還可以詞性標註,句法分析
  • 小白python機器學習之路(一)
    對的,就是這麼直接,理解了什麼是機器學習,才能更好的學習機器學習。(怎麼像是繞口令。。)機器學習就是利用算法,從數據中尋找一定的模式和知識,並對看似結果不可知的事件做出預測。從自然科學專業學生的角度而言,我們更關注如何從實驗中獲取數據,而機器學習更關注獲得數據之後的事情。我們處理實驗數據的理論基礎是統計學,而機器學習可以理解為更「高級」的統計學,從數據到結論,是機器學習所關注的事情。
  • 《Python 機器學習》-Python Machine Learning第一版+第二版(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • 常用python機器學習庫總結
    眾所周知現在人工智慧非常的火熱,機器學習也算是人工智慧中的一個領域,在其中有一塊是對文本進行分析,對數據進行深入的挖掘提取一些特徵值,然後用一些算法去學習,訓練,分析,甚至還能預測,我們就來看看python有哪些機器學習庫吧!1.
  • 算法應用|機器學習python應用,初識機器學習是怎樣滴感受?
    每個算法模型都介紹其較為通用且實用的建模過程,力爭使基礎較差的讀者也能無障礙利用python來使用機器學習算法。1 初識機器學習1.1 什麼是機器學習?它專門研究計算機如何模擬和學習人的行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷完善自身的性能。機器學習已經有了十分廣泛的應用,例如:數據挖掘、計算機視覺、自然語言處理、生物特徵識別、搜尋引擎、醫學診斷、檢測信用卡欺詐、證券市場分析、 DNA 序列測序、語音和手寫識別、戰略遊戲和機器人運用。
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    上一篇文章中介紹了機器學習的簡單知識,還有python中進行機器學習實踐需要的生態環境,接下來將會通過鳶尾花分類這個例子對機器學習做一個簡要的介紹。通過一步一步地實現這個項目來介紹以下內容。導入和使用python中機器學習的各個方面的類庫。
  • 開源《Python 機器學習》-Python Machine Learning第一版+第二版(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。
  • 使用Python+OpenCV進行圖像處理之入門教程
    圖像處理有很多種應用,包括用於解析文檔和生成相應文本的光學字符識別(OCR)、圖像增強與重建、物體識別、人體運動識別、手勢識別、人臉識別等。在學習的過程中,你會遇到過奇形怪狀的各種圖像濾波器,那有沒有去思考如何實現它嗎,在本文中,我們將通過實現一個簡單的濾波器來開始我們的圖像處理之旅!什麼是OpenCVOpenCV是一個開源庫,包含了許多計算機視覺算法。
  • Python & 機器學習項目集錦 | GitHub Top 45
    文章首先簡單回顧了 Python 中列表的基本概念,並與Python中其他的數據結構進行比較。接著講解了列表生成器的學習。文章還講解了 Python 列表背後的數學知識,創建列表生成器的方法,以及如何在 for 循環或 lambda 隱函數中重寫它們。
  • 《Python 機器學習》第一版+第二版(附電子版 pdf)
    全書共16章,除了簡要介紹機器學習及Python在機器學習中的應用,還系統講述了數據分類、數據預處理、模型優化、集成學習、回歸、聚類、神經網絡、深度學習等內容。本書將機器學習背後的基本理論與應用實踐聯繫起來,通過這種方式讓讀者聚焦於如何正確地提出問題、解決問題。本書講解了如何使用Python的核心元素以及強大的機器學習庫,同時還展示了如何正確使用一系列統計模型。