[PYTHON] Katzenerkennung mit OpenCV (Modellverteilung)

(Hinzugefügt am 2014/09)

Ich schreibe auch einen Artikel darüber, wie man Katzenrassen mithilfe von Deep-Learning-Techniken identifiziert. Bitte beziehen Sie sich, wenn Sie interessiert sind.

Katzenerkennung mit OpenCV

detect_chocolat2.jpg (Chocolat-Kichijoji Chariko)

Katzen- und Bildverarbeitung Teil 1 - Sammeln von Materialien organisierte das Sammeln von Katzenbildern, aber hier verwenden wir die gesammelten Katzenbilder, um Katzen zu organisieren. Ich habe ein Lernmodell (Klassifikator) zur Erkennung erstellt.

Wenn Sie interessiert sind, werden die technischen Details auf dem Blog geschrieben. Die Modellverteilung wird später in diesem Eintrag erläutert.

Das Lernen erfolgt mit dem bekannten Boosting (eine der Lernmethoden des Ensembles). Für die Feature-Menge haben wir LBP-Feature verwendet, mit dem die Modellerstellung und -überprüfung schnell wiederholt werden kann. Darüber hinaus wurden mithilfe von Cloud Sourcing etwa 7.000 Anmerkungsdaten erfasst.

Wie benutzt man

C++ Verwenden Sie es in C ++ wie folgt.


// objdetect.cpp
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/objdetect/objdetect.hpp>

int main(int argc, char** argv) {
  using namespace std;
  if(argc != 3) {
    cerr << "./objdetect [image file] [cascade file]" << endl;
    exit(-1);
  }
  cv::Mat src_img = cv::imread(argv[1], 1);
  if(src_img.empty()) {
    cerr << "cannot load image" << endl;
    exit(-1);
  }
  cv::Mat dst_img = src_img.clone();
  string cascade_file = string(argv[2]);
  cv::CascadeClassifier cascade;
  cascade.load(cascade_file);
  if(cascade.empty()) {
    cerr << "cannot load cascade file" << endl;
    exit(-1);
  }
  vector<cv::Rect> objects;
  cascade.detectMultiScale(src_img, objects, 1.1, 3);
  vector<cv::Rect>::const_iterator iter = objects.begin();
  cout << "count: " << objects.size() << endl;
  while(iter!=objects.end()) {
    cout << "(x, y, width, height) = (" << iter->x << ", " << iter->y << ", "
         << iter->width << ", " << iter->height << ")" << endl;
    cv::rectangle(dst_img,
                  cv::Rect(iter->x, iter->y, iter->width, iter->height),
                  cv::Scalar(0, 0, 255), 2);
    ++iter;
  }
  cv::imwrite("result.jpg ", dst_img);
  return 0;
}
##Kompilieren und ausführen
$ g++ -o objdetect objdetect.cpp -I/path/to/opencv/include -L/path/to/opencv/lib -lopencv_core -lopencv_highgui  -lopencv_objdetect
$ ./objdetect cat.jpg cascade.xml
count: 1
(x, y, width, height) = (278, 185, 65, 65)

Es scheint, dass sich die Erkennungsgenauigkeit spürbar erhöht, wenn die Parameter zum Zeitpunkt der Erkennung lose angegeben werden (der Parameter minNeighbors ist auf einen kleinen Wert eingestellt). Natürlich nehmen die Anzahl der Fehlalarme zu, aber wenn Sie eine Verarbeitung hinzufügen, z. B. Fälle ausschließen, in denen der Erkennungsbereich kleiner als eine bestimmte Größe ist (unter Angabe des Parameters minSize), können Sie ihn wie einen bestimmten Grad an Genauigkeit aussehen lassen.

CascadeClassifier::detectMultiScale - docs.opencv.org

Python Einfach zu bedienen von Python.

#!/usr/local/bin/python
# -*- coding: utf-8 -*-

import sys
import cv2 as cv

def detect(imagefilename, cascadefilename):
    srcimg = cv.imread(imagefilename)
    if srcimg is None:
        print('cannot load image')
        sys.exit(-1)
    dstimg = srcimg.copy()
    cascade = cv.CascadeClassifier(cascadefilename)
    if cascade.empty():
        print('cannnot load cascade file')
        sys.exit(-1)
    objects = cascade.detectMultiScale(srcimg, 1.1, 3)
    for (x, y, w, h) in objects:
        print(x, y, w, h)
        cv.rectangle(dstimg, (x, y), (x + w, y + h), (0, 0, 255), 2)
    return dstimg

if __name__ == '__main__':
    result = detect('cat.jpg', 'cascade.xml')
    cv.imwrite('result.jpg', result)

Modellverteilung

Ich werde das Modell veröffentlichen, das ich dieses Mal gemacht habe. Eine Kaskadendatei (cascade.xml), die von OpenCV gelesen werden kann.

Da wir auf unserem Personal Server einen Stapelprozess ausführen, der das neue Hinzufügen von Lehrerdaten zur Datenbank erkennt und das Lernen ausführt, sollte dieser kontinuierlich und automatisch auf ein genaueres Modell aktualisiert werden.

Wenn jedoch keine Maßnahmen ergriffen werden, erreicht die Genauigkeit ein Plateau. Ich denke, dass der Algorithmus durch Hinzufügen verschiedener Vor- und Nachbearbeitungen verbessert wird.

detect_edo1.jpg detect_mimi1.jpg detect_cat-nerima1.jpg detect_5610691368_f59529e648_z.jpg detect_8854205418_cc97dbeaaa_z.jpg

Recommended Posts

Katzenerkennung mit OpenCV (Modellverteilung)
Versuchen Sie die Kantenerkennung mit OpenCV
Echtzeit-Kantenerkennung mit OpenCV
Gesichtserkennung mit Python + OpenCV
Anime-Gesichtserkennung mit OpenCV
OpenCV-Funktionserkennung mit Google Colaboratory
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Größenänderung, Mosaik, Gesichtserkennung mit OpenCV, manchmal Elefantenstempel
Katze zurück mit OpenCV erkennen
Binarisierung mit OpenCV / Python
Modellbefestigung mit lmfit
Sprites mit OpenCV drehen
Regression mit einem linearen Modell
Datenerweiterung mit openCV
[Zusammenfassung] Objekterkennungsmodell "End-to-End-Objekterkennung mit Transformatoren" mit Transformer
Einfache TopView mit OpenCV
Stolpern Sie mit opencv3 von Homebrew
Verbessern Sie schnell die Erkennungsgenauigkeit, indem Sie Parameter mit openCV-Gesichtserkennung angeben
"Apple-Verarbeitung" mit OpenCV3 + Python3
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
3. Normalverteilung mit neuronalem Netz!
Feature-Erkennung mit opencv (Eckenerkennung)
Gesichtserkennung mit Python + dlib
Binarisieren Sie Fotodaten mit OpenCV
Loop-Video-Laden mit opencv
Kalibrieren Sie das Modell mit PyCaret
Holen Sie sich Bildfunktionen mit OpenCV
Gesichtserkennung / Schneiden mit OpenCV
Erkennung von Blockchain-Manipulationen mit Python
Gesichtserkennung mit Haar Cascades
Probieren Sie OpenCV mit Google Colaboratory aus
Erstellung eines Kaskadenklassifikators mit opencv
Verwenden von OpenCV mit Python @Mac
Bilderkennung mit Keras + OpenCV
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3