Recherche par image de la pellicule en utilisant Pythonista3

Chose que tu veux faire

Affichez les résultats dans Safari à l'aide de [SearchByImage] de Google (http://www.google.co.jp/searchbyimage) à partir des images enregistrées dans la pellicule iOS.

La concrétisation

Pythonista3 a une fonction que vous pouvez appeler votre propre script Python à partir de la feuille partagée de l'application, alors utilisez ceci. Pour plus d'informations sur Pythonista 3, consultez cet article de M. Hitoburogu (Parler de l'attrait de l'environnement de fabrication révolutionnaire "Pythonista 3" qui fonctionne sous iOS). Ça a été. Pythonista3 peut utiliser Python2.7 et Python3.5, mais cette fois je l'ai écrit en Python3.5.

Écrit

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()

Flux général

  1. Sélectionnez une image et exécutez le script.
  2. Obtenez le premier chemin de fichier à partir de la pièce jointe reçue.
  3. Vérifiez s'il s'agit d'une image, exécutez search_by_image (), et en cas de succès, l'url du résultat de la recherche sera renvoyée.
  4. Ouvrez l'url renvoyée dans Safari et quittez.

Recevoir des images

Pythonista3 a un module appelé appex qui peut utiliser les données reçues dans la feuille partagée et ainsi de suite, et cela obtiendra le fichier image de la pellicule. Si c'est vrai, je pensais que je pouvais obtenir le chemin de l'image avec ʻappex.get_file_path () , mais je ne pouvais pas l'obtenir, donc ʻAppex.get_attachments () est utilisé pour extraire le chemin de la première pièce jointe.

MultipartEncoder Je dois utiliser multipart / post pour télécharger des images, ce dont je ne suis pas sûr. Apparemment, il existe un package utile appelé requests_toolbelt. Cependant, les premiers Pythonista 3 n'avaient pas requests_toolbelt. StaSh y joue un rôle actif. Maintenant que vous pouvez utiliser pip, je l'ai installé à partir d'ici.

Je ne suis pas sûr, mais je ne peux pas utiliser le navigateur Web

Je fais webbrowser.open () pour ouvrir l'url, mais apparemment cela ne fonctionne pas à partir du partage. Tout d'abord, activez la fonction de pont vers Objective-C avec from objc_util import *. Ensuite, en appelant ʻUIApplication.sharedApplication () .openURL (nsurl (url)) `, vous pouvez ouvrir l'url dans Safari. Je ne comprends pas le mécanisme de cette zone, mais en l'utilisant, il est possible d'ouvrir une application différente en utilisant Safari ou le schéma d'URL de la feuille partagée.

fin

Ensuite, je pense que ce serait bien si SearchByImage pouvait être utilisé à partir des images qui sont arrivées sur Twitter.

Recommended Posts

Recherche par image de la pellicule en utilisant Pythonista3
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Utilisez le code python pour détecter la posture par openpose à partir de l'image de la caméra USB
J'ai essayé de détecter l'iris à partir de l'image de la caméra
[Python] Spécifiez la plage de l'image en faisant glisser la souris
Obtenez l'image de "Suzu Hirose" par recherche d'images Google.
Remarque DJango: depuis le début (en utilisant une vue générique)
[Python] Masquez l'image dans un cercle à l'aide de Pillow
Rechercher la table à l'aide de sqlalchemy et créer un dictionnaire
Appelez l'API Bing Image Search v5 depuis Python pour collecter des images
Créer une instance GCE à partir d'une image Docker GCR à l'aide de terraform
Tirez en accéléré à partir d'une caméra PC en utilisant Python, OpenCV
Cherchons à partir de la ligne
Supprimer le cadre de l'image
L'image est Namekuji
[Affichage de la carte] Affichez une carte à partir de l'adresse enregistrée par l'utilisateur à l'aide de l'API JavaScript de Google Maps et de l'API de géocodage!
Faisons-le en divisant numpy sans utiliser l'instruction for
Essayez de modifier une nouvelle image à l'aide du modèle StyleGAN2 entraîné
Utilisez sqlalchemy pour rechercher la table DB et créer un Dataflame pour les pandas
Faisons-le en multipliant numpy sans utiliser l'instruction for
J'ai essayé de couper une image fixe de la vidéo
Préparez un environnement d'analyse haute vitesse en accédant à mysql depuis l'environnement d'analyse de données
Divulguer le savoir-faire qui a créé un service de recherche d'images similaire pour les actrices audiovisuelles grâce à l'apprentissage profond par chainer
Générer une image Docker à l'aide de Fabric
Créer un identifiant Santa à partir d'une image du Père Noël
Coupons le visage de l'image
Script Python qui collecte automatiquement des images typiques à l'aide de la recherche d'images Bing
[EV3 x Python] Diffusez les images de la caméra sur votre PC en utilisant mjpg-streamer.
Préparez une URL pour afficher vous-même l'image téléchargée par Active Storage
Recherche de synonymes dans la liste de mots (csv) par Python Japanese WordNet