Erster Beitrag & Ich habe gerade angefangen, Programmieren zu lernen, daher gibt es viele schlechte Sätze und Codes, aber ich hoffe, Sie werden es lesen.
Beim Durchsuchen von Bildern auf Twitter wurde ich von vielen Nur-Text-Tweets und Bildern außer dem Zielgenre gestresst. Daher dachte ich, dass es besser wäre, wenn ich nur die gewünschten extrahieren könnte. (Zusammenfassung: Ich möchte erotische Bilder)
Holen Sie sich einen API-Schlüssel zur Verwendung der Cloud Vision-API Dieser Artikel war hilfreich
Die Twitter-API gilt für die Verwendung und erhält einen API-Schlüssel und ein Token. Es erfordert ein wenig Zeit und Mühe, da der Verwendungszweck auf Englisch beschrieben werden muss. Dieser Artikel war hilfreich
Die folgenden drei Bibliotheken von Drittanbietern werden verwendet. Alle können mit pip installiert werden.
main.py
import base64
import json
import os
import pickle
import time
import schedule
import tweepy
import requests
Importieren Sie die Bibliothek.
main.py
API_KEY = 'Twitter API key'
API_SECRET_KEY = 'Twitter API secret key'
ACCESS_TOKEN = 'Twitter Access token'
ACCESS_TOKEN_SECRET = 'Twitter Access token secret'
CVA_API_KEY = "Cloud Vision API key"
Behalten Sie jeden Schlüssel, den Sie erhalten haben.
Holen Sie sich zuerst die TL, die die Quelle des Tweets ist. Dieses Mal verwende ich list_timeline, weil ich die Tweets des zur Liste hinzugefügten Kontos abrufen möchte, aber ich denke, es ist auch gut, user_timeline usw. zu verwenden, um auf ein bestimmtes Konto einzugrenzen.
main.py
auth = tweepy.OAuthHandler(API_KEY, API_SECRET_KEY)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth, wait_on_rate_limit=True)
#Holen Sie sich Tweets von der Timeline
def main():
with open('before_tl.pickle', 'rb') as f:
before_tl = pickle.load(f)
tl = api.list_timeline(owner_screen_name="Listen Sie die Twitter-ID des Administrators auf", slug="Der Name der Liste, die Sie erhalten möchten")
with open('before_tl.pickle', 'wb') as f:
pickle.dump(tl, f)
for tweet in reversed(tl): #Tweet, umgekehrt, um die RT-Zeit in chronologischer Reihenfolge zu sortieren
if not tweet in before_tl:
media_getter(tweet)
Der Grund für das Speichern von TL mit Pickle besteht darin, zu vermeiden, dass die Pay-as-you-go-GCP-API übersteuert wird. Wenn ein Tweet von TL übergeben wird, wird er mit der vorherigen TL sortiert und die Verarbeitung wird nur für neue Tweets ausgeführt.
main.py
#Benutzername von Tweet(ID)Erhalten
def username_geter(tweet):
if 'RT' in tweet.text:
return tweet.retweeted_status.user.screen_name
return tweet.user.screen_name
#Rufen Sie die URL-Liste der Bilder ab
def media_getter(tweet):
try:
medialist = [d.get('media_url') for d in tweet.extended_entities["media"]]
name = username_geter(tweet)
for media in medialist:
img_save(media,name)
except:
print('Text Only')
Der Bildschirmname des Benutzers wird beim Speichern des Bildes als Dateiname verwendet.
Damit ist der Vorgang zum Abrufen der Bild-URL von Twitter abgeschlossen.
Von hier aus können Sie das Bild speichern und zur Analyse an Cloud Vision übergeben.
main.py
#Speichern Sie das Bild von der URL und ändern Sie das Speicherziel entsprechend der Beurteilung
def img_save(media,name):
url_path = media.split("/")[-1]
file_name = "adult/" + name + url_path
response = requests.get(media)
image = response.content
with open(file_name, "wb") as f:
f.write(image)
identify = img_sort(file_name)
if identify == "adult":
print('---saved image---')
else:
import os
os.remove(file_name)
#Gibt ein Urteil entsprechend dem Ergebnis zurück
def img_sort(img_path):
res_json = img_judge(img_path)
judgement = res_json['responses'][0]['safeSearchAnnotation']['adult']
if judgement == "POSSIBLE":
print(judgement)
return "possible"
elif judgement == "LIKELY" or judgement == "VERY_LIKELY":
print(judgement)
return "adult"
else:
print(judgement)
#Senden Sie Bilder an cloudvisoinapi und erhalten Sie Ergebnisse
def img_judge(image_path):
api_url = 'https://vision.googleapis.com/v1/images:annotate?key={}'.format(CVA_API_KEY)
with open(image_path, "rb") as img:
image_content = base64.b64encode(img.read())
req_body = json.dumps({
'requests': [{
'image': {
'content': image_content.decode('utf-8')
},
'features': [{
'type': 'SAFE_SEARCH_DETECTION'
}]
}]
})
res = requests.post(api_url, data=req_body)
return res.json()
Das Speicherziel des Bildes wird bestimmt, indem die URL durch "/" geteilt und aufgelistet wird und das extrahierte letzte Verzeichnis mit dem Bildschirmnamen und dem Verzeichnis kombiniert wird.
Das gespeicherte Bild wird an die API übergeben und der Prozess wird basierend auf dem zurückgegebenen Ergebnis verzweigt. Klicken Sie hier, um zu sehen, welcher Wert zurückgegeben wird (https://cloud.google.com/vision/docs/reference/rpc/google.cloud.vision.v1?hl=ja#google.cloud.vision). v1.SafeSearchAnnotation).
Es ist eine Spezifikation, LIKELY (höchstwahrscheinlich) und höher zu speichern und die anderen zu löschen, aber dieses Mal habe ich das Speicherziel entsprechend dem Urteil geändert, um die Genauigkeit von Cloud Vision zu überprüfen.
main.py
import shutil
elif identify == "possible":
new_file_name = "possible/" + name + url_path
shutil.move(file_name, new_file_name)
print('---saved possibleimage---')
else:
new_file_name = "other/" + name + url_path
shutil.move(file_name, new_file_name)
print('---saved otherimage---')
Machen wir das. Die Verarbeitung erfolgt alle 8 Sekunden nach Zeitplan.
main.py
if __name__ == "__main__":
schedule.every(8).seconds.do(main)
while True:
schedule.run_pending()
time.sleep(1)
(Da das Bild eines Drittanbieters verwendet wird, ist das Bild unscharf.)
Ich konnte nur die erotischen Bilder sicher extrahieren und speichern. Es ist ein Meisterwerk, dass immer mehr Bilder hinzugefügt werden. Es wurde bestätigt, dass die Genauigkeit im Vergleich zu der als MÖGLICH beurteilten ziemlich hoch war. Alles, was gesehen werden kann, wird als wahrscheinlich oder höher beurteilt.
Dieses Mal habe ich SAFE_SEARCH_DETECTION verwendet (die Fähigkeit zu bestimmen, ob ein Bild schädlichen Inhalt enthält), aber es gibt viele andere Funktionen in der Cloud Vision-API. Wenn Sie die Funktion gut nutzen, können Sie sie für verschiedene Bildersammlungen und Klassifizierungen verwenden.
Probieren Sie TEXT_DETECTION der Google Cloud Vision-API in Python aus Ich habe versucht, die Google Cloud Vision-API zu verwenden Verwendung von Tweety ~ Teil 1 ~ [Getting Tweet]
Recommended Posts