Uma rede neural para promover uma conta de cachorro no Instagram ou um cachorro robô em ação

Mecânica

Por uma questão de brevidade, o script da promoção será denominado "cão robô" . Imagine que esse script em nome de uma conta de cachorro coleta periodicamente postagens por hashtags sobre tópicos de cães e gosta dessas postagens. Alguns dos autores dessas postagens vão se interessar por quem gostou delas e irão para a página da conta do cachorro. Bem, então, como vai. Alguém irá rolar algumas telas para baixo e seguir em frente. Alguém dará ao robô algumas curtidas recíprocas (o que também não é ruim, pois as curtidas aumentam o alcance dos posts). E se você gostar da conta (o que é possível, porque o cachorro é muito carismático ), ele pode se inscrever.





Cuidado: gosto em massa

Deve-se notar que tais ações são chamadas de "gosto em massa" e não são particularmente bem-vindas pelo Instagram. Quando uma atividade robótica suspeita aparece, o Instagram primeiro emite vários avisos e, em seguida, pode banir a conta para sempre. By the way, massliking manual também cai sob a proibição (ou seja, se não for um serviço automatizado que gosta, mas você pessoalmente).





Há uma opinião de que o massliking não funciona muito bem agora. Bem, vamos verificar ao mesmo tempo.





Serviços e bibliotecas para gostar e seguir em massa

Apesar de tudo o que foi dito acima, dezenas de serviços diferentes para o massliking e massliking acompanham ao vivo e florescem (os interessados ​​podem procurar aqui , aqui ou no google). Isso sugere que o massliking funciona de qualquer maneira.





Acontece como com sexo. Parece que todos estão engajados, mas não é aceito discutir em uma sociedade decente. Novamente, você pode encontrar limites estabelecidos empiricamente para o gosto em massa na Internet. Se o cão robô não os ultrapassar, não deve ser enviado para o banimento. Para contas jovens (menos de seis meses a partir da data de registro), isso não é mais do que 30 curtidas por hora ou 720 por dia.





Existem bibliotecas especiais para pythonists. O mais famoso é o Instapy (12 mil estrelas no Github, por um minuto). Existem outros menos conhecidos. Aliás, recentemente no Habré saiu um artigo em que uma biblioteca instabot muito decente entende . Mas eu pessoalmente não os usaria "de frente" para hackear automaticamente por hashtags. Pelo seguinte motivo.





O que há de errado com hashtags

, ( Instagram , ).





Você vê um cachorro, cachorro ou cachorro?  E eles são ...
, ? ...

, , . , , .





, ( ), ! - .





"" . , , . - , - . 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, .





É preciso dizer que cães com uma dada implementação de uma rede neural nem sempre são definidos corretamente. Por exemplo:





Por que os cães não voam como pássaros?
Por que os cães não voam como pássaros?

O fato é que o ângulo da foto é bastante incomum - o nariz do cachorro parece o bico de algum pássaro como o tucano. Ou seja, em condições reais, parte do conteúdo adequado será inevitavelmente rejeitado, o cão robô não gostará de todos os cães. Mas, no quadro do problema a ser resolvido, é perfeitamente possível tolerar isso.





Continua. Em um futuro próximo, vou implantar um robô em uma máquina local, vou fazer uma viagem, coletar estatísticas sobre a resposta a curtidas e cancelar os resultados.








All Articles