Konvertieren Sie das an Jason Stay Samlike in Python übergebene Bild in ASCII Art

Ich habe ein automatisches AA-Erstellungsprogramm erstellt. Wenn Sie ein Bild mit einem der Schlüsselwörter "URL", "URL" und "Dateipfad" übergeben, wird es automatisch in AA konvertiert.

Kriminalpolizei

Hallo. Das bin ich, ein langweiliger Artikelbot seit vielen Jahren. Neulich war meine Notiz wie ein stiller Don ungewöhnlich orange. Überraschenderweise scheint uns der begeisterte Enthusiast von Jason Stasam gefolgt zu sein. Ich habe mehrmals gesehen, dass Sie einen wunderbaren Artikel schreiben, der voller Liebe und Mut ist, aber in diesem Artikel 1 Idol ** Nikonii ** war auf dem Bildschirm, also schreibe ich auch einen Artikel über Jason Stasam! Ich habe nachgedacht. ~~ (Geheimnis) ~~ ** [Dieser Tag](https://qiita.com/tags/%e3%82%b8%e3%82%a7%e3%82%a4%e3%82%bd%e3%83%b3%e3% 83% bb% e3% 82% b9% e3% 83% 86% e3% 82% a4% e3% 82% b5% e3% 83% a0), ich möchte, dass Sie beliebt sind! ** ** **

Abgesehen von Jason Davon abgesehen mag ich ihn so sehr, dass ich jedes Mal, wenn ich Jasons Film sehe, nur drei Tage lang Muskeltraining mache. Ich mag sie alle, aber mein Favorit ist Jason Stasams verschwenderische Ausgaben (?) SPY, nicht wahr? Es ist schön, cool zu sein wie ein Mechaniker, aber nimm es ab wie ein Adrenalin! Muskel! Explosion! Brustbehaarung! Ich mag es dumm zu sein wie Fu ● k off !!, persönlich. Auch wenn es nicht die Hauptrolle wie die Mini-Mini-Strategie und Snatch ist, hat es eine starke Präsenz, und wenn überhaupt, ist es die coolste, die Arbeit wird verschärft und gelockert, und ich denke, es ist eine wirklich erstaunliche Person. Ich bin einsam, weil es in meinem Alter nicht viele Menschen gibt, die die Geschichte westlicher Gemälde verstehen können.
Ich empfehle übrigens Herrn Bratpit. Es ist solide, aber es ist eine super gute Arbeit, also komm bitte zum "Fight Club".
Es tut mir leid, das Tag mit einem so schlechten Artikel zu verschmutzen. Aber ** [dieses Tag](https://qiita.com/tags/%e3%82%b8%e3%82%a7%e3%82%a4%e3%82%bd%e3%83%b3% e3% 83% bb% e3% 82% b9% e3% 83% 86% e3% 82% a4% e3% 82% b5% e3% 83% a0), ich möchte, dass Sie beliebt sind! **(Zweites Mal)

Überblick

Sie können Artikel finden, die automatisch "AA" mit "Python" erstellen. Während wir uns auf diesen Bereich beziehen, werden wir ihn mit "Pillow" und "Numpy" implementieren. Referenz 1Referenz 2

Was ist AA ? "AA" ist eine Abkürzung für "ASCII Art", ein Bild, das nur mit Buchstaben gezeichnet wird. Ursprünglich wurde es in einer Zeit geschaffen, in der Bilder im Internet nicht mehr so ausgetauscht werden konnten, wie es jetzt ist, aber selbst jetzt ist die Adresse eine IP-Adresse und der Beruf ist uns als Wächter bekannt, und wenn eine großartige Person es schafft ![AAのサンプル](https://i.pinimg.com/originals/da/ab/a4/daaba4919657a094b1e22fe69e8e7941.png) Auf diese Weise wird der Umriss gut erfasst und als Strichzeichnung vervollständigt. Ich dachte, dass ich vielleicht sogar mit Python mein Bestes geben muss, aber ich hatte nicht so viel Zeit in meinem einsamen Leben, also werde ich dieses Mal dem bestehenden folgen und an einem einfachen AA arbeiten, das als Schattensystem bezeichnet wird. Erstens ist mein Erfahrungswert näher am Web, und `Python` versteht die 3px des ersten Strichs von` P` nicht, so dass selbst das Schattensystem schwierig war ... [Ein Papier im Strichzeichnungsstil AA (!?)](Https://www.jstage.jst.go.jp/article/iieej/35/5/35_5_435/_pdf)

Dieses Mal werde ich ein Schattensystem AA zeichnen. Durch einfaches Anordnen der Zeichen, die der Helligkeit jedes Pixels am nächsten kommen, können Sie endlich so etwas erstellen. Die Breite beträgt 80 Zeichen, was nur der Größe eines kleinen Fensterterminals entspricht. Sie können es jedoch frei anpassen, um es größer zu machen. Wenn Sie es größer machen, erhöht sich die Auflösung zwangsläufig und das Finish wird schön. image.png Wie ist das? Wenn Sie sich das ansehen, wenn Sie müde sind und aufhören, können Sie diese schöne Stimme nicht hören? What the f●ck are you doing? Get back to work or I will beat the shit out of you! ** (Ich weiß nichts über Compliance, weil es eine Stimme ist, die in meinem Gehirn wiedergegeben wird) ** 100-mal energischer, knuspriger arbeiten, Viehzucht in der Firma. Diesmal ist so ein Projekt.

Wie auch immer, es ist cool, es in AA zu sehen.

Umgebung

$ uname -a
Linux raspberrypi 5.4.51-v7l+ #1333 SMP Mon Aug 10 16:51:40 BST 2020 armv7l GNU/Linux
$ python -V
Python 3.7.3
$ pip list
Package             Version
------------------- ---------
beautifulsoup4      4.9.2
numpy               1.19.2
Pillow              7.2.0
pip                 20.2.3
requests            2.24.0

Charakteristisch

Wie oben erwähnt, gibt es keinen Präzedenzfall, wenn nur die automatische Erstellung des Farbtons AA erfolgt, daher habe ich einige Änderungen vorgenommen. Ich kann es selbst sagen, aber ich denke, es ist einfacher zu bedienen.

  1. AA wird zurückgegeben, unabhängig davon, ob Sie "Schlüsselwort", "URL" oder "lokaler Dateipfad" übergeben.
  2. In Bezug auf das oben Gesagte wird ** Google Image Search ** integriert, um Bilder automatisch zu erfassen.
  3. ** Zeichenzuweisungsalgorithmus ** (?) Wurde verbessert, um die Reproduzierbarkeit zu verbessern.
Wo verwenden? Wenn ich mit CUI das Bild schnell überprüfen möchte, halte ich es für unpraktisch, da es Zeit und Mühe kostet, es einzeln über FTP zu übertragen. Mit diesem Programm ist dies praktisch, da Sie Bilder in AA anzeigen und sich möglicherweise einen Überblick verschaffen können. (Schurke) Persönlich erlaube ich kein anderes Linux als CUI (obwohl dies nicht der Fall ist), daher bin ich froh, dass AA mit einem einzigen Befehl auf dem Schwarz-Weiß-Bildschirm von Linux aufblüht. Wenn Sie ihm beispielsweise etwas wie "Sonoda Umi" geben, lächelt Umi-chan. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684034/b127d147-7c12-182c-eb63-47bc832ff30d.png) Sind Sie glücklich? ?? Ich bin fröhlich

Zeichenzuweisungsalgorithmus Gymnastik

Weisen Sie die zu verwendenden Zeichen entsprechend der Pixelhelligkeit zu. Die diesmal verwendeten Zeichen sind nur die ursprünglichen ASCII-Zeichen, um die Kompatibilität zu verbessern.

  1. Berechnen Sie das Verhältnis der Pixel jedes Zeichens zu einem bestimmten Bereich
  2. Normalisieren Sie das Zeichenverhältnis, konvertieren Sie es in 256 Schritte von 0 bis 255 und verwenden Sie es als Karte.
  3. Vergleichen Sie jedes Pixel des Bildes, das Sie konvertieren möchten, mit der Karte und wählen Sie den entsprechenden Text aus

jason2aa.py


from PIL import Image, ImageDraw, ImageFont #Ladekissen
import numpy as np #Numpy wird geladen

width = 80 #Breite (Anzahl der Zeichen)
font = ImageFont.truetype('DejaVuSansMono.ttf', 16) #Schriftart für die Kartenerstellung (Razzpie-Standardeinstellung)
characters = list('!"#$%&\'(*+,-./0123456789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[^_`abcdefghijklmnopqrstuvwxyz{|~ ') #Zu verwendende Zeichenfolge (ASCII-Zeichenfolge)
img_gray = 'hogehoge.png' #Bild zu konvertieren

#Normalisierungsfunktion (0 in der Liste der übergebenen Zahlen-Normalisiert sich auf 255 und kehrt zurück)
def normalize(l):
    l_min = min(l) #Mindestwert in der Liste
    l_max = max(l) #Maximalwert in der Liste
    return [(i - l_min) / (l_max - l_min) * 255 for i in l] #Normalisieren Sie jeden Gegenstand

#Dichteberechnungsfunktion (Liste der übergebenen Zeichen{256-Stufen-Dichte:Brief}Rückgabe als Wörterbucharray von
def calc_density():
    l = [] #Deklarieren Sie ein leeres Array, um die Dichte zu setzen
    for i in characters: #Wiederholen Sie dies für alle Zeichen
        im = Image.new('L', (24,24), 'black') #24px in Graustufen*24px schwarze monochromatische Bilderzeugung
        draw = ImageDraw.Draw(im) #Konvertieren Sie das erstellte Bild in ein ImageDrow-Objekt
        draw.text((0,0), i, fill='white', font=font) #Zeichnen Sie Text in Weiß auf das Bild
        l.append(np.array(im).mean()) #Fügen Sie den Helligkeitsdurchschnitt des Bildes hinzu, in dem die Zeichen zum Array gezeichnet werden
    normed = normalize(l) #Normalisieren Sie das Array mit der Helligkeit jedes Zeichens auf 256 Stufen
    dict = {key: val for key, val in zip(normed, characters)} # {Luminanz:Brief}Erstellen Sie ein Wörterbucharray von
    return sorted(dict.items(), key=lambda x:x[0]) #Sortiert das Wörterbucharray nach Helligkeit und kehrt zurück

maps = calc_density() #Holen Sie sich ein Wörterbuch-Array für die Helligkeit jedes Zeichens
density_map = np.array([i[0] for i in maps]) #Extrahieren Sie nur die Helligkeit und platzieren Sie sie in einem numpy Array
charcter_map = np.array([i[1] for i in maps]) #Extrahieren Sie nur Zeichen und fügen Sie sie in ein numpy-Array ein
imarray = np.array(img_gray) #Numpy Helligkeitsarray pro Pixel im Bild
index = np.searchsorted(density_map, imarray) #Suchen Sie das Zeichen mit der Helligkeit, die der Helligkeit des Pixels am nächsten kommt, und indizieren Sie es in einem numpy-Array
aa = charcter_map[index] #Ausgefallener Index des Zeichen-Numpy-Arrays im obigen Numpy-Array

Es ist fast ein großartiger Artikel hier runde pakuri (sorry), aber das Verhalten beim Zuweisen von Zeichen wurde verbessert. Die Operation ist etwas schwer, aber die Funktion numpy.searchsorted kann verwendet werden, um den Farbton genauer auszudrücken. Dadurch wird es einfacher, Konturen beim Konvertieren von Bildern zu erfassen.

Die Funktion numpy.searchsorted gibt den Index des Elements, das dem Ziel am nächsten liegt, vom Referenzarray zurück, wenn Sie das Referenzarray als erstes Argument und das Ziel als zweites Argument übergeben. [^ 1] Da das Referenzarray sortiert werden muss und der Index zurückgegeben wird, wird die periphere Verarbeitung wie die Kartenerstellung mithilfe des Wörterbucharrays zwangsweise implementiert. Nach Konvertieren von zwei Arrays in einen Wörterbuchtyp von Helligkeit und Zeichen und Sortieren nach Schlüssel (Helligkeit) Es wird erneut in zwei Arrays gespeichert: Helligkeit und Buchstaben. Wenn Sie es wie eine Anwendung verwenden, ist es besser, diese Funktion abzuschaffen und die Karte für eine leichtere Verarbeitung zu korrigieren.

Wenn Sie mit numpy die Helligkeit jedes Pixels des Bildes anordnen und an die Funktion "numpy.searchsorted" übergeben, erhalten Sie ein Array **, in dem die Indizes von Zeichen mit ähnlicher Helligkeit gespeichert werden. Zu Wenn Sie dies mit einer beliebigen Methode exportieren, wird AA abgeschlossen.

Bildsuche → Erfassung bei Google

Ich werde ein Schlüsselwort an Google Lehrer werfen und das Bild durch Schaben ziehen. Da es sich ohnehin um AA handelt, ist die Bildqualität bei Samne-Qualität ausreichend, sodass die Implementierung einfach ist. Übrigens können Sie "q = Schlüsselwort1 + Schlüsselwort2" als Suchschlüsselwort an Google Teacher und "tbm = isch" als Bildsuchspezifikation übergeben.

  1. Holen Sie sich den HTML-Code der gesamten Google-Suchergebnisse mit "Anfragen"
  2. Nehmen Sie das Tag (Bild)
  3. Holen Sie sich den Attributwert "src" (Bild-URL).
  4. Laden Sie das Bild über den Link für das erfasste Bild herunter
  5. Speichern Sie das heruntergeladene Bild in einer temporären Datei

jason2aa.py


from bs4 import BeautifulSoup #Bibliothek zum Spielen mit HTML-Knoten
import requests #Steuert die http-Kommunikation"Geeignet für Menschen"Bibliothek
import tempfile #Bibliothek, die temporäre Dateien verwaltet
import re #Bibliothek für reguläre Ausdrücke
import sys #Eine Bibliothek, die höher als Python arbeiten kann

#Bildsuch- / Aufnahmefunktion (gibt die übergebene URL als Bild zurück)
def get_image(destination):
    try: #Da es nicht lokal abgeschlossen wird, ist es möglich, einen Fehler anzunehmen und die Ausnahmebehandlung einzubeziehen
        html = requests.get(destination).text #Senden Sie eine http-Anfrage und konvertieren Sie die Antwort in das Textformat
        soup = BeautifulSoup(html,'lxml') #Geben Sie eine ausgezeichnete lxml für den Parser an (in xml, wenn ein Fehler auftritt)
        links = soup.find_all('img') #HTML-Tag<img>Finde alles heraus und extrahiere es
        for i in range(10): #Wiederholen Sie diesen Vorgang bis zu 10 Mal, da Sie das Bild möglicherweise nicht aufnehmen können
            link = links[random.randrange(len(links))].get('src') #Nach dem Zufallsprinzip<img>Vom Tag"src"Extrahieren Sie eine
            if re.match('https?://[\w/:%#\$&\?\(\)~\.=\+\-]+', link): #Bestätigen Sie, dass die extrahierte Zeichenfolge eine URL ist
                image = requests.get(link) #Laden Sie das extrahierte Linkbild herunter
                image.raise_for_status() #Anforderungsfehler erkennen (z. B. 404)
                break #Ich habe es normal verstanden, also gehe ich durch die Schleife
            elif i >= 9: #Ich habe es 10 Mal wiederholt, also bin ich aus der Schleife herausgekommen
                raise Exception('Oh dear. Couldn\'t find any image.\nWhy don\'t you try with my name?') #Wirf einen Fehler in die oberste Ausnahme und einen benutzerdefinierten Fehler
    except Exception as e: #Fangen Sie den Fehler ab
        print('Error: ', e) #Standardfehlermeldung
        sys.exit(1) #Endcode endet mit 1 (abnormal)
    fd, temp_path = tempfile.mkstemp() #Erstellen Sie eine temporäre Datei
    with open(temp_path, 'wb') as f: #Temporäre Datei öffnen
        f.write(image.content) #Schreiben Sie ein Bild in eine temporäre Datei
    return temp_path #Gibt eine temporäre Datei zurück

url = 'https://www.google.com/search?q=Jason+Statham&tbm=isch&safe=off&num=100&pws=0' #Suchen Sie mit dem Google-Lehrer nach dem Bild von Jason Stasam
file_path = get_image(url) #Speichern Sie den Pfad des erfassten Bildes in einer Variablen

Sie können sehr glatt kratzen. Als ich dasselbe in PHP implementierte, dauerte es einige Zeit, daher fand ich es praktisch.

Beachten Sie, dass es sich bei der Anforderungsbibliothek um eine Implementierung auf HTTP-Ebene handelt. Selbst wenn die Antwort beim Ausführen von "request.get ()" 404 Not found "lautet, tritt kein Fehler auf. Da es sich jedoch um einen Fehler beim Scraping handelt, müssen Sie die Fälle selbst trennen. Glücklicherweise können alle Statuscodes außer denen in den 200ern als abnormal angesehen werden, z. B. "404". Wenn Sie also eine praktische Funktion namens "raise_for_status ()" auf die Antwort anwenden, wird ein Fehler ausgelöst, wenn sich der Statuscode nicht in Ihren 200ern befindet. Sie können diesen Fehler mit "außer" aufgreifen und nach Nummer klassifizieren.

Lass es in Ruhe

Ich habe damit herumgespielt, damit es wie eine App verwendet werden kann. Die Hilfe wird durch Eingabe von "jason2aa.py -h" angezeigt.

 Okey, here is the fuckin' help.

  Usase: jason2aa.py keyword keyword .. [option]

  [Options]
   -w   Width of AA (The number of characters)
   -p   Path to image file
   -b   Return Black and white reversed image
   -h   Show this help (or -help)

 If I was you, I'm sure I can handle such a bullshit app without the help.
 Because, I'm a true man.

Ich spreche von Jason Stay Samlike, also habe ich Jason Stay Sam in meinem Gehirn gebeten, mir mit einer Nachricht zu helfen, damit ich nicht "getäuscht" werde. Bitte versuchen Sie verschiedene Fehler auszuspucken. Zum Beispiel, wenn Sie eine Bildschirmbreite übergeben, die nicht "int ()" ist image.png Ich werde es so zurückgeben lol Wenn das Suchwort oder der Pass nicht übergeben wird, wird das Bild von Jason Stasam natürlich zurückgegeben.

Die Breite wird standardmäßig auf die volle Breite der Terminalfenstergröße eingestellt. Es wird in os.get_terminal_size (). Columns unter Bezugnahme auf diesen Artikel implementiert. Ich wollte die Anzahl der zu ladenden Bibliotheken reduzieren, also habe ich es mit os implementiert.

Der übergebene Pfad wird verarbeitet, um nicht so viele Fehler wie möglich zu verursachen. Bitte lassen Sie mich wissen, wenn ein Fehler auftritt.

Wir haben auch die Schwarz-Weiß-Inversion eingeführt. Es soll in einem Terminal verwendet werden, aber beim Schreiben in das Web usw. ist es im Grunde ein weißer Hintergrund, daher wird es mit der Option -b invertiert.

Bildverarbeitung

Es ist notwendig, den ** Kontrast ** zu erhöhen, um das Finish mit dem Farbton AA zu verbessern. Wenn der Kontrast gering ist, können ** schwarz ** (Leerzeichen) und ** weiß ** ( M) nicht verwendet werden und der Umriss ist nicht klar. Da AA eine kleine Anzahl von Dichteausdrucksschritten aufweist, ist es schwierig zu wissen, was das Bild ist, es sei denn, der Umriss ist klar. Dieses Mal habe ich aufgrund des Moduls einfach den Kontrast erhöht und ihn dann grau skaliert, aber es scheint, dass eine Methode zur Klärung des Farbtons bei der Konvertierung in Graustufen auch gut ist.

cont = ImageEnhance.Contrast(img) #Erstellen Sie ein Pillow Enhancer-Objekt
img_gray = cont.enhance(2.5).convert('L') #Verdoppelt den Kontrast und wandelt ihn in Graustufen um
Tiefgraue Ich bin mit [diesem Artikel] vertraut (https://qiita.com/yoya/items/dba7c40b31f832e9bc2a), aber es scheint, dass es verschiedene Konvertierungsmethoden gibt, auch wenn es als Graustufen bezeichnet wird. ![test_p (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684034/dc1aba4e-1296-fd7b-2eae-61ae28626b5c.jpeg) Die linke ist mit "Pillow" grau skaliert, und die rechte ist mit dem "Fading-Prozess" von "OpenCV" grau skaliert. Es ist schwer, den Unterschied in diesem Bild zu erkennen, aber wenn Sie sich im Anzug und im Y-Shirt umschauen, können Sie sehen, dass ** Schwarz und Weiß auf der rechten Seite hervorgehoben ** ist. Die rechte scheint eine Methode zu sein, die sich auf die Aufrechterhaltung des Kontrasts konzentriert. Einfach ausgedrückt, Graustufen sind ein Versuch, die menschliche Farbempfindung mit Schwarz- und Weißtönen auszudrücken, aber für Maschinen zu erkennen * Es scheint, dass es besser ist, den Kontrast beizubehalten ** als den menschlichen Sinn. Es ist interessant, dass dieser Bereich eng mit der Bilderkennung usw. verbunden zu sein scheint, wenn Sie tiefer graben. Apropos rechtzeitige Bilderkennung in mir, es ist "Sehkraft", aber das ist wahrscheinlich ein sehr komplizierter Prozess. Wenn ich jedoch das Ende der Bildverarbeitung auf diese Weise berühre, denke ich, dass es einfach eine Parameteranpassung ist, wenn auch die komplizierte Verarbeitung untersucht wird. Weil es einfach ist, ist es eine wunderbare Technologie, die nur als Ergebnis der jahrzehntelangen Erfahrung einschließlich der umliegenden Programme bezeichnet werden kann.

Voller Text

Wenn Sie eine Bibliothek haben, können Sie diese kopieren. Ich weiß nicht, ob Nachfrage besteht, aber ich habe sie auf GitHub veröffentlicht. `Ich möchte das Terminal zum Blühen bringen! Wenn Sie eine Person sind, versuchen Sie es bitte.

jason2aa.py


#!/usr/bin/python3.7

from PIL import Image, ImageDraw, ImageFont, ImageEnhance
from bs4 import BeautifulSoup
import numpy as np
import requests
import tempfile
import os
import re
import sys
import random

is_direct = False
is_local = False
background = 'black'
color = 'white'
width = os.get_terminal_size().columns
font = ImageFont.truetype('DejaVuSansMono.ttf', 16)
characters = list('!"#$%&\'(*+,-./0123456789:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[^_`abcdefghijklmnopqrstuvwxyz{|~ ')

def get_image(destination):
    try:
        html = requests.get(destination)
        html.raise_for_status()
        soup = BeautifulSoup(html.text,'lxml')
        links = soup.find_all('img')
        for i in range(10):
            link = links[random.randrange(len(links))].get('src')
            if re.match('https?://[\w/:%#\$&\?\(\)~\.=\+\-]+', link):
                image = requests.get(link)
                image.raise_for_status()
                break
            elif i >= 9:
                raise Exception('Oh dear. Couldn\'t find any image.\nWhy don\'t you try with my name?')
    except Exception as e:
        print('Error: ', e)
        sys.exit(1)
    fd, temp_path = tempfile.mkstemp()
    with open(temp_path, 'wb') as f:
        f.write(image.content)
    return temp_path

def normalize(l):
    l_min = min(l)
    l_max = max(l)
    return [(i - l_min) / (l_max - l_min) * 255 for i in l]

def calc_density():
    l = []
    for i in characters:
        im = Image.new('L', (24,24), background)
        draw = ImageDraw.Draw(im)
        draw.text((0,0), i, fill=color, font=font)
        l.append(np.array(im).mean())
    normed = normalize(l)
    dict = {key: val for key, val in zip(normed, characters)}
    return sorted(dict.items(), key=lambda x:x[0])

arg = sys.argv

if '-h' in arg or '-help' in arg:
    print(' Okey, here is the fuckin\' help.\n'
        '\n'
        '  Usase: jason2aa.py keyword keyword .. [option]\n'
        '\n'
        '  [Options]\n'
        '   -w   Width of AA (The number of characters, less than 10000)\n'
        '   -p   Path to image file\n'
        '   -b   Return Black and white reversed image\n'
        '   -h   Show this help (or -help)\n'
        '\n'
        ' If I was you, I\'m sure I can handle such a bullshit app without help.\n'
        ' Because, I\'m a true man.')
    sys.exit(0)
if '-b' in arg:
    b_index = arg.index('-b')
    for i in range(1):
        arg.pop(b_index)
    background = 'white'
    color = 'black'
if '-w' in arg:
    w_index = arg.index('-w')
    try:
        w_temp = int(arg.pop(w_index + 1))
        if w_temp > 0 and w_temp < 10000:
            width = w_temp
        else:
            raise Exception
        arg.pop(w_index)
    except Exception:
        print('Watch it! You passed me a invalid argument as width.\nI replaced it with default width.')
        for i in range(1):
            arg.pop(w_index)
if '-p' in arg:
    p_index = arg.index('-p')
    try:
        path = arg.pop(p_index + 1)
        arg.pop(p_index)
        if re.match('https?://[\w/:%#\$&\?\(\)~\.=\+\-]+', path):
            try:
                image = requests.get(path)
                image.raise_for_status()
                fd, temp_path = tempfile.mkstemp()
                with open(temp_path, 'wb') as f:
                    f.write(image.content)
                is_direct = True
                file_path = temp_path
            except Exception as e:
                raise Exception(e)
        else:
            if os.path.exists(path):
                is_local = True
                file_path = path
            else:
                raise Exception('There ain\'t any such file. Are you fucking with me?')
    except Exception as e:
        print(e, '\nThe above error blocked me accessing the path.\nBut, don\'t worry. Here is the my photo.')
        url = 'https://www.google.com/search?q=Jason+Statham&tbm=isch&safe=off&num=100&pws=0'
        file_path = get_image(url)
else:
    if len(arg) <= 1:
        arg = ['Jason', 'Statham']
    else:
        arg.pop(0)
    url = 'https://www.google.com/search?q=' + '+'.join(arg) + '&tbm=isch&safe=off&num=100&pws=0'
    file_path = get_image(url)

for i in range(10):
    try:
        img = Image.open(file_path)
    except Exception:
        print('Oh, fuck you! I couldn\'t open the file.\n'
        'It\'s clearly your fault, cuz the path wasn\'t to image file.\n'
        'But, possibly, it\'s caused by error like 404. Sorry.')
        sys.exit(1)
    if img.mode == 'RGB':
        cont = ImageEnhance.Contrast(img)
        img_gray = cont.enhance(2.5).convert('L').resize((width, int(img.height*width/img.width//2)))
        break
    elif is_local or is_direct:
        print('Shit! I could only find only useless image.\nYou pass me files containing fuckin\' alpha channel, aren\'t you?.')
        sys.exit(1)
    elif i >= 9:
        print('Damm it! I could only find only useless image.\nMaybe, fuckin\' alpha channel is contained.')
        sys.exit(1)
    else:
        os.remove(file_path)
        file_path = get_image(url)

maps = calc_density()
density_map = np.array([i[0] for i in maps])
charcter_map = np.array([i[1] for i in maps])
imarray = np.array(img_gray)
index = np.searchsorted(density_map, imarray)
aa = charcter_map[index]

aa = aa.tolist()
for i in range(len(imarray)):
    print(''.join(aa[i]))

if not is_local:
    os.remove(file_path)

sys.exit(0)

Zusammenfassung

Ich bin eine unerfahrene Person, also habe ich zum ersten Mal mit Python gespielt. Ich habe es genossen, in einer sehr benutzerfreundlichen und vertrauten Sprache zu schreiben.

Sie können herausfinden, wie viele AAs automatisch erstellt werden können, indem Sie das Web durchsuchen. Als ich es jedoch selbst erstellt habe, war es interessant, es aus einer anderen Perspektive zu betrachten, z. B. durch die Erstellung von Zuordnungen. Wenn ich Zeit habe, möchte ich auch ** AA ** des ** Strichzeichnungssystems ** schreiben, indem ich "CV2" und "Konturerkennung" voll ausnutze.

Wenn Sie Ratschläge oder Vorschläge haben, würde ich mich freuen, wenn Sie mich wissen lassen könnten. Bis zum Ende Danke fürs Lesen!

Einer nach dem anderen (Ich glaube nicht (lacht)) Vielen Dank an einen bestimmten Programmierer, der mir die Gelegenheit gegeben hat, etwas Verspieltes zu tun. Ich denke, dass Artikel zu vertrauten Themen (?) Wie Jason Stasam eine Gelegenheit für Leute sein können, die nichts mit Programmierung zu tun haben, einen Einblick in die Rückseite der Software zu bekommen. Es ist untrennbar mit elektronischen Geräten verbunden, und in der heutigen Zeit, in der viele Technologieebenen eng miteinander verbunden sind, ist es sehr sinnvoll, einen Blick auf die Technologie zu werfen, die uns unterstützt, auch wenn wir uns nicht in einer direkt verwandten Position befinden. Ich denke. Wenn ich ein wenig mit dem Programmieren anfasse, habe ich oft das Gefühl, dass es einen großen Einfluss auf die Art und Weise hat, wie ich über alltägliche Dinge denke. (Qiita ist eine Plattform für Programmierer, daher ist der Zweck völlig anders.) Ich hoffe, dass selbst ein so einfaches Skript jemandem helfen kann. Vielen Dank.

[^ 1]: Das genaue Verhalten ist unterschiedlich. Weitere Informationen finden Sie im Offiziellen Dokument.

Recommended Posts

Konvertieren Sie das an Jason Stay Samlike in Python übergebene Bild in ASCII Art
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Konvertieren Sie PDFs mit Python in Massenbilder
Konvertieren Sie Markdown in Python in PDF
So sammeln Sie Bilder in Python
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Konvertieren Sie die psd-Datei in Python in png
In Python von Markdown in HTML konvertieren
Konvertieren Sie die absolute URL in eine relative URL in Python
Konvertieren Sie den exponentiellen Float in Python in str
Konvertieren Sie kubischen Netzcode in Python in WKT
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Konvertieren Sie das NumPy-Array "ndarray" in Python [tolist ()]
Konvertieren Sie die Netzmaske der CIDR-Notation in Python in eine gepunktete Dezimalschreibweise
So konvertieren Sie Gleitkommazahlen in Python in Binärzahlen
Konvertieren Sie das Bild in .zip mit Python in PDF
Konvertieren Sie die asynchrone API im Callback-Stil in async / await in Python
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Konvertieren Sie den Webpay-Entitätstyp in den Dict-Typ (rekursiv in Python).
[Python] Datum in Zeichenfolge konvertieren
Base64-Codierung von Bildern in Python 3
Konvertieren Sie numpy int64 in python int
[Python] Liste in Pandas konvertieren [Pandas]
Melden Sie sich auf der Website in Python an
Konvertieren Sie Bilder mit PIL (Python Imaging Library) in Sepia.
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Konvertieren Sie die CIDR-Notation in Python
Sprechen mit Python [Text zu Sprache]
Wie man in Python entwickelt
Konvertieren Sie Python 3.x-Code in Python 2.x.
Post an Slack in Python
Konvertieren Sie eine Excel-Datei für verschiedene Zwecke in Python in Text
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
Konvertieren Sie in Python usw. geschriebene Dateien in PDF mit Syntax-Hervorhebung
Lesen Sie die Big-Endian-Binärdatei in Python und konvertieren Sie sie in ndarray
Zahlenerkennung in Bildern mit Python
Bildpixel-Manipulation in Python
[Python] Wie man PCA mit Python macht
Verwendung von SQLite in Python
Workflow zum Konvertieren der Formel (Bild) in Python
Im Python-Befehl zeigt Python auf Python3.8
Versuchen Sie, Trace in Python zu berechnen
So konvertieren Sie 0,5 in 1056964608 auf einmal
Python> Liste> Doppelte Liste in einfache Liste konvertieren
Extrahieren Sie mit Python Text aus Bildern
Poste ein Bild von Python auf Tumblr
Wie man MySQL mit Python benutzt
Verwendung von ChemSpider in Python
6 Möglichkeiten zum Stringen von Objekten in Python
[Python] Konvertiert natürliche Zahlen in Ordnungszahlen
Konvertieren Sie die Dezimalzahl in n-ary [Python]
Umgang mit Japanisch mit Python
Python> Tupel> Konvertiert doppeltes Tupel in einzelnes Tupel
Eine Alternative zu "Pause" in Python
Arbeiten mit DICOM-Bildern in Python
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Hinweis: [Python3] Konvertiert datetime in eine Zeichenfolge in einem beliebigen Format
In der XML-Datenbank (BaseX) gespeichertes XML-Dokument in das CSV-Format konvertieren (mit Python)