Suchen Sie mit Pythonista3 nach einem Bild von der Kamerarolle

Was du machen willst

Zeigen Sie die Ergebnisse in Safari mit Googles SearchByImage aus den in der iOS-Kamerarolle gespeicherten Bildern an.

Realisierung

Pythonista3 verfügt über eine Funktion, mit der Sie Ihr eigenes Python-Skript über das freigegebene Blatt der Anwendung aufrufen können. Verwenden Sie diese Funktion. Weitere Informationen zu Pythonista 3 finden Sie in diesem Artikel von Hitoburogu ([Über die Attraktivität der revolutionären Fertigungsumgebung "Pythonista 3", die unter iOS ausgeführt wird) (http://hitoriblog.com/?p=42145)). Es ist gewesen. Pythonista3 kann Python2.7 und Python3.5 verwenden, aber dieses Mal habe ich es in Python3.5 geschrieben.

Geschrieben

searchbyimage.py


import requests, appex, imghdr
from requests_toolbelt.multipart.encoder import MultipartEncoder
from objc_util import *

def search_by_image(fp):
	user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.98 Safari/537.36 Vivaldi/1.6.689.40'
	m = MultipartEncoder(fields={'encoded_image': (fp.name, fp)})
	r = requests.post('http://www.google.co.jp/searchbyimage/upload',
		data=m,
		headers={'Content-Type': m.content_type, 'User-Agent': user_agent})
	if r.status_code == 200:
		return r.url
	else:
		return 0

def main():
	image = appex.get_attachments()[0]
	if imghdr.what(image):
		url = search_by_image(open(image, 'rb'))
		if url:
			UIApplication.sharedApplication()._openURL_(nsurl(url))

if appex.is_running_extension():
	main()

Allgemeiner Ablauf

  1. Wählen Sie ein Bild aus und führen Sie das Skript aus.
  2. Rufen Sie den ersten Dateipfad aus dem empfangenen Anhang ab.
  3. Überprüfen Sie, ob es sich um ein Bild handelt, führen Sie "search_by_image ()" aus. Bei Erfolg wird die URL des Suchergebnisses zurückgegeben.
  4. Öffnen Sie die zurückgegebene URL in Safari und beenden Sie das Programm.

Bilder empfangen

Pythonista3 verfügt über ein Modul namens Appex, das die auf dem freigegebenen Blatt empfangenen Daten usw. verwenden kann. Dadurch wird die Bilddatei der Kamerarolle abgerufen. Wenn das stimmt, dachte ich, ich könnte den Pfad zum Bild mit "appex.get_file_path ()" abrufen, aber ich konnte ihn nicht abrufen Ich verwende appex.get_attachments (), um den Pfad aus dem ersten Anhang zu extrahieren.

MultipartEncoder Ich muss Multipart / Post verwenden, um Bilder hochzuladen, was ich nicht sicher bin. Anscheinend gibt es ein nützliches Paket namens request_toolbelt. Das frühe Pythonista 3 hatte jedoch keinen request_toolbelt. StaSh spielt dort eine aktive Rolle. Jetzt, da Sie pip verwenden können, habe ich es von hier aus installiert.

Ich bin nicht sicher, aber ich kann keinen Webbrowser verwenden

Ich mache "webbrowser.open ()", um die URL zu öffnen, aber anscheinend funktioniert es nicht beim Teilen. Aktivieren Sie zunächst die Bridge-Funktion für Objective-C mit from objc_util import *. Durch Aufrufen von "UIApplication.sharedApplication () .openURL (nsurl (url))" können Sie die URL in Safari öffnen. Ich verstehe den Mechanismus dieses Bereichs nicht, aber wenn Sie diesen verwenden, können Sie eine andere Anwendung öffnen, indem Sie Safari oder das URL-Schema aus dem freigegebenen Blatt verwenden.

Ende

Als nächstes denke ich, es wäre schön, wenn SearchByImage aus den Bildern verwendet werden könnte, die auf Twitter kamen.

Recommended Posts

Suchen Sie mit Pythonista3 nach einem Bild von der Kamerarolle
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
Verwenden Sie Python-Code, um die Körperhaltung durch Öffnen des USB-Kamerabilds zu erkennen
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
[Python] Geben Sie den Bereich des Bildes durch Ziehen der Maus an
Holen Sie sich das Bild von "Suzu Hirose" von Google Bildersuche.
DJango Hinweis: Von Anfang an (mit einer generischen Ansicht)
[Python] Maskiere das Bild mit Pillow zu einem Kreis
Durchsuchen Sie die Tabelle mit sqlalchemy und erstellen Sie ein Wörterbuch
Rufen Sie die Bing Image Search API v5 von Python auf, um Bilder zu sammeln
Erstellen Sie eine GCE-Instanz aus einem GCR Docker-Image mithilfe von Terraform
Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf
Lassen Sie uns von der Linie suchen
Entfernen Sie den Rahmen aus dem Bild
Das Bild ist Namekuji
[Kartenanzeige] Zeigen Sie eine Karte anhand der vom Benutzer registrierten Adresse mit der JavaScript-API und der Geokodierungs-API von Google Maps an!
Lassen Sie es uns tun, indem Sie numpy teilen, ohne die for-Anweisung zu verwenden
Versuchen Sie, ein neues Bild mit dem trainierten StyleGAN2-Modell zu bearbeiten
Verwenden Sie sqlalchemy, um die DB-Tabelle zu durchsuchen und eine Datenflamme für Pandas zu erstellen
Lassen Sie uns dies tun, indem wir numpy multiplizieren, ohne die for-Anweisung zu verwenden
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Bereiten Sie eine Hochgeschwindigkeitsanalyseumgebung vor, indem Sie in der Datenanalyseumgebung auf MySQL klicken
Geben Sie das Know-how bekannt, das einen ähnlichen Bildsuchdienst für AV-Schauspielerinnen durch tiefes Lernen durch Chainer geschaffen hat
Generieren Sie ein Docker-Image mit Fabric
Machen Sie eine Santa-Kennung aus einem Santa-Bild
Schneiden wir das Gesicht aus dem Bild
Python-Skript, das mithilfe der Bing-Image-Suche automatisch typische Bilder sammelt
[EV3 x Python] Streame Kamerabilder mit mjpg-streamer auf deinen PC.
Bereiten Sie eine URL vor, um das von Active Storage hochgeladene Bild selbst anzuzeigen
Suchen Sie nach Synonymen aus der Wortliste (csv) von Python Japanese WordNet