Der Site-Name lautet Like Navi
Ich habe Unity, Open-GL und Objective-C verwendet, weil ich bisher Apps entwickelt habe, aber ich habe auch die Geschichte der Erstellung von Webdiensten von Grund auf aufgezeichnet, um Python und maschinelles Lernen sowie praktische Vorteile zu untersuchen. Ich werde.
Ich denke, dass alle Punkte, in die Anfänger passen, süchtig sind, also denke ich, dass es für Anfänger hilfreich sein wird.
Übrigens habe ich weder SIFT noch CNN verwendet, weil die Genauigkeit von BOVW-ähnlichen Typen gering war und die Dimension groß wurde und der Rechenaufwand zunahm. Wenn ich CNN machte, musste ich Bilder aus dem Video extrahieren oder ich hatte das Gefühl, dass es nicht genug Samples gab und ich gab auf, weil es eine schlechte Maschine war.
Originalgeschichte: AV-Bilderkennungstechnologie und ihre Umgebung ** Vielen Dank! **
------------ Lokale Arbeit ----------------
------------ Serverseitige Arbeit ----------------
Ich mache den Code nicht verfügbar, weil es normal ist, das Skript nicht zum Crawlen zu verwenden. Ich habe Python und BeautifulSoup4 verwendet.
Siehe Scraping mit Python und Beautiful Soup und es wird für Generationen gelöst.
Es ist schwierig, opencv selbst zu erstellen. Wenn Sie dies jedoch lokal oder auf einem Mac tun, installieren Sie anaconda und installieren Sie es.
pip install anaconda
conda install -c https://conda.binstar.org/jjhelmus opencv
Es kann nur durch Eingabe der beiden Befehle verwendet werden. Einfach.
Dieser Bereich wird hilfreich sein Versuchen Sie, mit Python (Anaconda) und OpenCV ein Gesichtsbild aus einem Video zu extrahieren Gesichtserkennung mit OpenCV durchführen, nur den Gesichtsteil [Python] zuschneiden und speichern
# -*- coding:utf-8 -*-
import cv2
import sys
import os
import shutil
image_path = "image.png "#Beliebiger Bildpfad
#Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
face_cascade = cv2.CascadeClassifier('[yourdir]/opencv/data/haarcascades/haarcascade_frontalface_default.xml')
#Datei lesen
image = cv2.imread(image_path)#Beliebiger Bildpfad
#Graustufenumwandlung
image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
#Ausführung der Objekterkennung (Gesichtserkennung)
faces = cascade.detectMultiScale(image_gray, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
#Ein Verzeichnis erstellen
if len(faces) > 0:
path = os.path.splitext(image_path)
dir_path = path[0] + '_face'
if os.path.isdir(dir_path):
shutil.rmtree(dir_path)
os.mkdir(dir_path)
i = 0;
for rect in faces:
#Schneiden Sie nur das Gesicht aus und speichern Sie
x = rect[0]
y = rect[1]
width = rect[2]
height = rect[3]
dst = image[y:y+height, x:x+width]
new_image_path = dir_path + '/' + str(i) + path[1];
cv2.imwrite(new_image_path, dst)#Geben Sie hier den Pfad zum Speichern des zugeschnittenen Bildes ein
i += 1
Nach dem Extrahieren des Gesichtsbildes werden die HOG-Merkmale (Histogramme orientierter Verläufe) extrahiert.
Referenz für HOG-Funktionen: Extraktion von HOG-Funktionen aus Bildern
Sehr einfach
hog=cv2.HOGDescriptor()
img=cv2.imread('test.jpg')
res=hog.compute(img)
Sag nur. Damit kann die verteilte Darstellung des Bildes aufgenommen werden.
Das Problem bei HOG-Funktionen ist jedoch der Fluch der Dimension. Wenn Sie versuchen, die Ähnlichkeit zwischen fast 300.000 Bildern und einer Website zu berechnen und zurückzugeben, ist dies normalerweise nicht möglich. Daher müssen die Ergebnisse der Dimensionskomprimierung (PCA) und der PCA geclustert (km) werden.
Zuerst müssen wir eine verteilte Darstellung für alle Bilder erhalten, also Ich habe unten eine Klasse erstellt, um Bilder für jeden Ordner stapelweise zu lesen.
from PIL import Image
import os
import cv2
from sklearn.cluster import KMeans
import numpy as np
import random
import pickle
import re
import sklearn
import dill
class Imageob(object):
def __init__(self):
pass
def fileread(self, filepath):
self.path = filepath
try:
temp = cv2.imread(filepath)
self.src = cv2.resize(temp,(64,64))
self.shape = temp.shape
except cv2.error as e:
pass
def readArray(self, array):
self.srcGrey = array
class Images(object):
def __init__(self):
self.images = []
def addImage(self, image):
self.images.append(image)
def readAllFiles(self, folderpath, isResize=False, height=256, width=256):
for path in self.readAllFilePath(folderpath):
p = path.replace(folderpath, "")
p = p.split("/")
m= m+1
image = Imageob()
image.fileread(path)
if image.shape[0] > 50: #Löschen Sie zu kleine Bilder
pi = ProcessImage()
image = pi.resize(image, 64, 64)
self.addImage(image)
n = n+1
def readAllFilePath(self, folderpath):
for root, dirs, files in os.walk(folderpath):
for file in files:
if not file.startswith(".") and file.endswith(".jpg "):
yield os.path.join(root, file)
#Extrahieren Sie hier die HOG-Funktionen
images = Images()
print("Laden Sie das Bild")
images.readAllFiles("/image_path")#Geben Sie den Ordner an, der das Gesichtsbild enthält
data = []
label = []
num = 0
for image in images.images:
hog = cv2.HOGDescriptor((64, 64), (16, 16), (8, 8), (8, 8), 9)
img_ = cv2.imread(image.path)
img_ = cv2.resize(img_,(64,64))
try:
hist = hog.compute(img_)
k = [] #Machen Sie einen Listenausdruck wie numpy.
if hist is not None:
for i in hist:
k.append(i[0])
else:
print("hist is NONE")
data.append(k)
except cv2.error as e:
pass
npdata = np.array(data) # scikit-np zur Verwendung mit lernen.Machen Sie es in Array-Format
pca = sklearn.decomposition.PCA(100)
pca.fit(npdata)
X_pca= pca.transform(npdata)
a =[] #Legen Sie das Histogramm in das oben erstellte Listenformat
for x in X_pca:
a.append(x)
kmeans_model = KMeans(n_clusters=10, random_state=10).fit(a)
labels = kmeans_model.labels_
Jetzt haben Sie ein PCA-Modell und ein Kmeans-Modell. Wenn Sie eine beschissene Klasse wie ich machen und eine Klasse mit untergeordneten Elementen machen, Ich habe Probleme mit Python Pickle, die ich nicht serialisieren kann. Es wird empfohlen, es mit Dill aufzubewahren, da es nicht schwer ist und dauerhaft ist.
Problemumgehung für Python-Pickle nicht serialisiert
Wenn Sie danach wie folgt schreiben, können Sie die COS-Ähnlichkeit berechnen, indem Sie den Bildpfad angeben
def cos_sim(v1, v2):
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
class Hog(object):
def __init__(self):
pass
def hog(self, path):
hog = cv2.HOGDescriptor((64, 64), (16, 16), (8, 8), (8, 8), 9)
img = cv2.imread(path)
img = cv2.resize(img , (64, 64))
t = []
try:
hist = hog.compute(img)
k = []
if hist is not None:
for i in hist:
k.append(i[0])
else:
print("hist is NONE")
t.append(k)
except cv2.error as e:
print('cv2_error')
return t
Nachdem Sie ein Bild erstellt haben, nehmen Sie die HOG-Feature-Menge, komprimieren Sie die Dimensionen mithilfe des Hauptkomponentenanalysemodells, schätzen Sie den Cluster, zu dem es gehört, mithilfe des Kmeasn-Modells und schätzen Sie die Ähnlichkeit mit allen Bildern in diesem Cluster. Einfach berechnen.
Die Websites, auf die ich verwiesen habe, sind unten aufgeführt. (Der Quellcode ist hier definitiv sauberer.)
Ich habe versucht, Anime-Gesichtsfotos nach Bag of Keywords zu klassifizieren
Wie benutzt man KAZE? Messung der Merkmalsmenge (ORB / AKAZE / KAZE / FAST / BRISK) mit OpenCV3.0.0-dev + Python2.7.6
An diesem Punkt ist der Rest wie ein Tutorial Ich habe es geschafft, indem ich hier gesucht habe.
Um ehrlich zu sein, sind Design und Markup die am wenigsten geeignete Arbeit, deshalb habe ich sie ausgelagert. So was. Die Investition hat sich übrigens überhaupt nicht erholt. Es besteht keine Aussicht auf Erholung.
Design / Codierung des Bildschirms von "Like Navi !!" voller Romantik eines Mannes
Es scheint, dass JS nicht gut darin ist, also habe ich beschlossen, es hier zu implementieren.
Es war eine Bibliothek, die sehr praktische Bilder im Browser extrahiert, da Smartphones auch so optimiert sind, wie sie sind. Es ist hier leicht geschrieben
Verwenden Sie das JQuery-Plug-In "Cropper", mit dem Bilder zugeschnitten werden
Das Gefühl, dass Sie verstehen können, wenn Sie mit der Basis-Demo spielen.
Um ehrlich zu sein, hat dies am längsten gedauert.
Die anfängliche Einstellung von Sakura VPS erfolgt gemäß hier.
Python hinzufügen Installieren Sie Python 2.7 unter CentOS 6.5 und verwenden Sie es mit Apache
Erstens ist Python 2.6.6 in CentOS 6.5 von Sakura VPS enthalten, und die Version unterscheidet sich von mod_wsgi, und es ist ein Fehler aufgetreten. Darüber hinaus wird kein Django-Fehler ausgegeben, und es ist wirklich ärgerlich, da die Anforderung nicht auf einem weißen Bildschirm angezeigt wird.
--Virtualenv Von hier. Dies ist wichtig, da Sie ohne sie normalerweise nicht wissen würden, auf welche Bibliothek sich der Pfad bezieht.
--OpenCV in CENTOS6.5 (vielleicht das schwierigste in allen Prozessen)
Sehen wir uns das Folgende als Referenz an. Wahrscheinlich das Schwierigste. #Ich erinnere mich ehrlich gesagt nicht. Übrigens war es ein Albtraum, dass ich den Server nicht benutzen konnte, wenn ich hell überschrieb, ohne die abhängigen Dateien zu sichern.
Versuchen Sie, OpenCV3.0 auf AMI zu installieren Arbeitsnotiz mit OpenCV3.0 und opencv_contrib in Ubuntu [Paket erforderlich, wenn openCV mit CENTOS6 verwendet wird](http://www.gimmickgeek.com/2014/10/04/centos6%E3%81%A7opencv%E3%82%92%E5%88%A9%E7 % 94% A8% E3% 81% 99% E3% 82% 8B% E6% 99% 82% E3% 81% AB% E5% BF% 85% E8% A6% 81% E3% 81% AA% E3% 83 % 91% E3% 83% 83% E3% 82% B1% E3% 83% BC% E3% 82% B8 /)
Übrigens können Sie hier die Grundidee lernen. Hinweise von einem sauberen VPS (CentOS6) zum Ausführen von Django mit Apache
Django-Bereitstellungseinstellungen
[Django von der Erstellung der Produktionsumgebung bis zur Veröffentlichung (Django 1.8.7 + Apache + mod_wsgi)] (http://marrsan.hateblo.jp/entry/2015/12/03/145235)
Wenn Sie es betrachten, sind 99% in Ordnung.
Es war jedoch notwendig, das Problem zu lösen, das Djnago und Scikit-Learn in CENTOS verursachen. Ich bin hier festgefahren. https://github.com/scikit-learn/scikit-learn/issues/3947
In der oben erstellten Datei wsgi.conf
LoadModule wsgi_module modules/mod_wsgi.so WSGIPythonPath /home/hoge/ENV/lib/python2.7/site-packages WSGIApplicationGroup %{GLOBAL}
Wenn Sie es als geben, wird es gelöst.
Holen Sie sich danach die Domain und legen Sie den virtuellen Host fest. Siehe die Seite unten
Versuchen Sie es mit Sakuras VPS [8] - Versuchen Sie, VirtualHost einzustellen
Bitte schreiben Sie es neu, da es entsprechend mit ****** gefüllt ist.
python.conf
<VirtualHost *:80>
ServerName sokkurinavi.com
ServerAlias www.sokkurinavi.com
WSGIScriptAlias / /var/www/cgi-bin/*******************/wsgi.py
#WSGIScriptAlias /sokuri /var/www/cgi-bin/*************
#Alias /static /home/hoge/ENV/lib/python2.7/site-packages/django/contrib/admin/static
Alias /static/ /var/www/cgi-bin/******************/static/
<Directory /var/www/cgi-bin/******************/static>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/cgi-bin/***************>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Die fertige Version ist diese Seite
** Eine letzte Sache, die ich sagen möchte, ist, dass wenn Sie eine erotische Site erstellen, ich dachte, es wäre ein Zufluss, aber ich empfehle keine erotischen Sites, da es immer Zufluss 1 oder 2 ist. ** ** **