Mecánica
En aras de la brevedad, el guión de la promoción se llamará "perro robot" . Imagine que este script en nombre de una cuenta de perro recopila periódicamente publicaciones por hashtags sobre temas de perros y le gusta esas publicaciones. Algunos de los autores de estas publicaciones estarán interesados en saber a quién le gustaron y accederán a la página de la cuenta del perro. Bueno, entonces, ya está. Alguien se desplazará hacia abajo un par de pantallas y continuará. Alguien le dará al robot un par de me gusta recíprocos (lo cual tampoco está mal, los me gusta aumentan el alcance de las publicaciones). Y si te gusta la cuenta (que es posible, porque el perro es muy carismático ), puede suscribirse.
Precaución: gusto masivo
Cabe señalar que tales acciones se denominan "me gusta masivo" y no son particularmente bien recibidas por Instagram. Cuando aparece una actividad robótica sospechosa, Instagram primero emitirá varias advertencias y luego puede bloquear la cuenta para siempre. Por cierto, el masivo manual también cae bajo la prohibición (es decir, si no es un servicio automatizado al que le gusta, sino a usted personalmente).
Existe la opinión de que el masivo no funciona muy bien ahora. Bueno, lo comprobaremos al mismo tiempo.
Servicios y bibliotecas para el masivo y el seguimiento masivo
A pesar de todo lo anterior, decenas de servicios diferentes para el masivo y el seguimiento masivo viven y florecen (los que estén interesados pueden mirar aquí , aquí o googlearse). Esto sugiere que massliking funciona de todos modos.
Resulta como con el sexo. Parece que todo el mundo está comprometido, pero no se acepta discutir en una sociedad decente. Una vez más, puede encontrar límites establecidos empíricamente para los gustos masivos en Internet. Si el perro robot no los supera, entonces no debe enviarse a la prohibición. Para las cuentas jóvenes (menos de seis meses desde la fecha de registro), esto no es más de 30 me gusta por hora o 720 por día.
Hay bibliotecas especiales para pitonistas. El más famoso es Instapy ( 12k estrellas en Github, por un minuto). Hay otros menos conocidos. Por cierto, recientemente en Habré hubo un artículo en el que entiende una biblioteca de instabot muy decente . Pero yo personalmente no los usaría "de frente" para auto-piratear con hashtags. Por la siguiente razón.
¿Qué pasa con los hashtags?
, ( Instagram , ).
, , . , , .
, ( ), ! - .
"" . , , . - , - . Object Detection, , SSD .
- , SSD MobileNet v.2, COCO2017. MobileNet, GPU . , 94%.
, SSD python. Github, , , .
import cv2
import json
from datetime import datetime
import requests
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
def id_class_name(class_id, classes):
for key, value in classes.items():
if class_id == key:
return value
#
shortcode = 'CJ.........'
classNames = {}
with open('models/coco2017_labels.txt', 'r+', encoding='utf-8') as file:
for line in file:
key = int(line.split(':')[0])
value = line.split(':')[1]
classNames[key] = value.strip()
COLORS = np.random.uniform(0, 255, size=(len(classNames), 3))
s = requests.session()
r = s.get(f'https://www.instagram.com/p/{shortcode}/?__a=1', headers = {'User-agent': 'bot'})
url = r.json()['graphql']['shortcode_media']['display_resources'][0]['src']
resp = requests.get(url, stream=True)
image = np.asarray(bytearray(resp.content), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
image_height, image_width, _ = image.shape
frame_resized = cv2.resize(image,(300,300))
model = cv2.dnn.readNetFromTensorflow('models/frozen_inference_graph.pb',
'models/ssd_mobilenet_v2_coco_2018_03_29.pbtxt')
model.setInput(cv2.dnn.blobFromImage(frame_resized, size=(300, 300), swapRB=True))
output = model.forward()
detections = output[0, 0, :, :]
detections = detections[detections[:,2].argsort()]
for detection in detections:
confidence = detection[2]
class_id = int(detection[1])
class_name = id_class_name(class_id, classNames)
if (confidence > 0.3):
box_x = int(detection[3] * image_width)
box_y = int(detection[4] * image_height)
box_width = int(detection[5] * image_width)
box_height = int(detection[6] * image_height)
cv2.rectangle(image, (box_x, box_y), (box_width, box_height), COLORS[class_id], thickness=2)
label = class_name + ": " + str(round(confidence, 2))
labelSize, baseLine = cv2.getTextSize(label, cv2.FONT_HERSHEY_DUPLEX, 0.5, 1)
yLeftBottom_ = max(box_y, labelSize[1])
cv2.rectangle(image, (box_x, box_y + labelSize[1]), (box_x + labelSize[0], box_y), COLORS[class_id], cv2.FILLED)
cv2.putText(image, label, (box_x, box_y + labelSize[1] - baseLine//2), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
plt.figure(figsize=(8,8))
plt.axis("off")
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
# -
#plt.savefig(f'{shortcode}.png')
OpenCV . , - , pip conda install.
/?__a=1 OpenAPI Instagram. , - , , . , Instagram, .
Hay que decir que los perros con una determinada implementación de una red neuronal no siempre se definen correctamente. Por ejemplo:
El hecho es que el ángulo en la foto es bastante inusual: la nariz del perro parece el pico de un pájaro como un tucán. Es decir, en condiciones reales, parte del contenido adecuado será inevitablemente rechazado, al perro robot no le gustarán todos los perros. Pero en el marco del problema que se está resolviendo, es muy posible aguantar esto.
Continuará. En un futuro cercano, desplegaré un robot en una máquina local, me iré de viaje, recopilaré estadísticas sobre la respuesta a los me gusta y descartaré los resultados.