[PYTHON] Eine Geschichte über die Automatisierung von Online-Mahjong (Jakutama) mit OpenCV und maschinellem Lernen

Überblick

Durch Verwendung des OpenCV Template Matching und des GUI-Operationsmoduls von Python BOT konnte die Mahjong-Kacheln im Webbrowser erkennen und darauf klicken, und das Spiel wurde automatisiert. Darüber hinaus wurde maschinelles Lernen für den logischen Teil verwendet, auf den die Mahjong-Kachel klicken soll.

Wenn Sie das Suchbild für Vorlagenübereinstimmungen ersetzen, kann es nicht nur in der Spatzenseele, sondern auch in anderen Mahjong-Spielen im Allgemeinen verwendet werden, und wenn Sie den Teil des maschinellen Lernens ändern, in allen Spielen, in denen unter bestimmten Bedingungen wiederholt eine rationale Auswahl erforderlich ist Es kann angewendet werden.

  • Im Spiel werden Bilder von Jakutama verwendet, um den Inhalt besser zu verstehen. Unter dem Gesichtspunkt des Urheberrechtsschutzes sind sie jedoch stark verschwommen.

Zielgruppe

Menschen, die maschinelles Lernen mögen (wie Mahjong) Leute, die an der Automatisierung von Windows- und GUI-Vorgängen interessiert sind, sich aber fragen, was OpenCV ist

Eine Person, die die Seele eines Spatzen mag, aber ein gebrochenes Herz hat, weil es zu schwierig ist, eine Probeveranstaltung durchzuführen Ich habe in der Vergangenheit in einem Bildverarbeitungslabor an einer Universität geschrieben ~~ Tötungszeit ~~ Leute, die sich für Skripte interessieren

Meine ~~ unreine ~~ Motivation

Neulich war ich süchtig nach der Spatzenseele. Ich bin es in letzter Zeit leid.

Wenn Sie täglich gegen mehrere Stationen spielen oder an einem Event teilnehmen, können Sie die Gacha-Belohnung erreichen. Spielen Sie also weiter ~~ und holen Sie sich ein süßes Mädchen ~~

Aber ich kann nicht mit einem Fremden im Netz auskommen, der sogar die Regeln kennt ~~ wie Arbeit ~~ Mahjong. (Insbesondere das Event passt zu anderen Spielern, unabhängig von ihren Fähigkeiten, und es ist zu schwer, ernsthaft zu spielen, da Rangliste und Belohnung nach dem Spielen nicht übereinstimmen.)

Wenn Sie jedoch nur den einfachen Tsumo-kiri-BOT bewegen, wird festgestellt, dass Sie sich nicht an Ihrem Schreibtisch befinden, und das schlechteste Konto wird gesperrt. (Ich war überrascht. Tu es nicht.)

Damit

--Betreiben Sie den Browser, indem Sie Mausklicks simulieren --Wähle ein Plättchen und wirf es weg und du kannst aggressiv sein

Ich habe beschlossen, einen BOT zu machen.

Komponente

Erfassung von Handkacheln + Tsumo-Kachelinformationen

Überblick

Ich habe in OpenCV einen Mechanismus namens Template Matching verwendet.

OpenCV (Open Source Computer Vision Library) ... Eine von Intel entwickelte und veröffentlichte Bibliothek für Open Source Computer Vision. Eine traumhafte Bibliothek, die verschiedene Funktionen für die Verarbeitung von Bildern und Videos auf einem Computer realisieren kann.

Vorlagenabgleich ... Ein traumhafter Prozess, der das Eingabebild nach dem Teil durchsucht, der dem Vorlagenbild am ähnlichsten ist (Teilbild).

Ich hätte es als Windows-Anwendung in C # machen können, aber ~~ Es ist schneller, die Spatzenseele direkt aufzuladen, als so viel Aufwand zu betreiben ~~ Dieses Mal habe ich Python übernommen, das schnell auf OpenCV zugreifen kann.

Nach der Installation von Python

$ pip install opencv-python

Sie können OpenCV nur verwenden, indem Sie es verwenden. Früher war es schwierig, Tutorials zu machen ... Ich denke, Sie sollten sich hier auf den Umweltbau beziehen

Installieren Sie OpenCV mit pip https://qiita.com/fiftystorm36/items/1a285b5fbf99f8ac82eb

Bereiten Sie alle Musterkachelbilder im Voraus vor, schneiden Sie 13 Kacheln aus der eigentlichen Bildschirmaufnahme aus und suchen Sie nach den passenden Kachelbildern, um die Kachelinformationen zu erhalten.

Aufmerksamkeit der Bildschirmaufnahme

Bitte beachten Sie, dass Browsergröße = App-Bildschirmgröße nicht gilt.

Sie können sehen, dass Jakutama den Browser transformiert, aber es ist eine Webanwendung, die so konzipiert ist, dass sie bei allen Auflösungen dem Seitenverhältnis entspricht. [^ 1] Mit anderen Worten, der Zeichenbereich, der vom Browser deformiert wird und nicht mit dem ursprünglichen Seitenverhältnis des Spiels übereinstimmt, wird als tiefschwarzer Bereich angezeigt.

Hier ist die Vorlagenübereinstimmung anfällig für Erkennungsziele, deren Größe sich vergrößert oder verkleinert hat. Daher ist es wichtig, zu Beginn des Prozesses die Bildschirmgröße (Erfassungsgröße) zu erfassen und dann eine Anpassungsverarbeitung hinzuzufügen, die der Größe des vorbereiteten Kachelvorlagenbilds entspricht. ist. (Wenn Sie das Spiel jedes Mal mit einer festen Anzeigeumgebung + Browsergröße spielen, ist dieser Vorgang nicht erforderlich, da die Größe des aufgenommenen Bildes und des Vorlagenbilds jedes Mal übereinstimmen.)

image.png Bildelemente, die sich so weit wie möglich an zwei Punkten befinden, werden im Voraus als Vorlagenbilder extrahiert, damit bei der Berechnung des Maßstabs weniger Fehler auftreten. Es ist eine gute Idee, ein Bild auszuwählen, das sich je nach Situation nicht ändert und keine ähnlichen Funktionen auf dem Bildschirm aufweist (≈ leicht zu identifizierende Eigenschaft).

Zu diesem Zeitpunkt ist es auch erforderlich, etwa 3-5 Arten von Vorlagenbildern vorzubereiten (oder sie während der Verarbeitung zu skalieren) und das Vorlagenbild mit dem höchsten Übereinstimmungsgrad und seiner Skalierung zu übernehmen. .. [^ 2](Da die Größe des als Vorlage vorbereiteten Bildes und das tatsächlich aufgenommene Bild unterschiedlich sind, wird der gesamte Prozess instabil, wenn die Erkennung des Bildschirmbereichs fehlschlägt.)

Indem Sie die Größe des als Vorlagenbild extrahierten Bildes und den Abstand zwischen den beiden Punkten zu diesem Zeitpunkt im Voraus messen und als Daten halten, können Sie die relative Position des Ortes ermitteln, an dem die Handkacheln ausgerichtet sind, selbst wenn sich die Anzeigeumgebung ändert. Werden. Durch Ausschneiden der Handkacheln nacheinander (cv2.crop) basierend auf einer der Vorlagen kann das Bild wie unten gezeigt extrahiert werden. (Da ich die handwerklichen Bilddaten durch manuelle Erfassung gesammelt habe, ist es ein wenig rasselnd. Es war in Ordnung, da es keinen großen Einfluss auf die Erkennungsgenauigkeit hatte.)

image.png

Dora 牌 hat immer einen glänzenden Bildschirmeffekt, aber in Bezug auf die Bildverarbeitung habe ich ein sehr schlechtes Gefühl (lacht)

Anerkennung von Kunsthandwerk

Um die Kachel selbst zu erkennen, wird übrigens jedes der extrahierten Kachelbilder aus dem folgenden "Kachellistenbild" mit der Vorlage abgeglichen.

image.png (* Das eingegebene Kuman-Bild entspricht einem Teil des Kachellistenbilds als Vorlage.)

Sie können Daten erstellen, in denen Kacheln in einer horizontalen Reihe angeordnet sind, und die x-Koordinaten des erkannten Bildes geben Aufschluss über die wahre Identität der Kacheln. (Es war schwer, diese Mahjong-Kachel nebeneinander zu erstellen ...) image.png Der Vorgang scheint in Ordnung zu sein, hat aber bisher 2,7 Sekunden gedauert. .. .. Da die Spatzenseele eine Haltezeit von 5 Sekunden hat, kann pro Verarbeitung bis zu 5 Sekunden Zeit aufgewendet werden. Um es etwas genauer auszudrücken, es kann nicht gesagt werden, dass der Beginn der Schleifenverarbeitung = der Moment ist, in dem sie trifft, also die Überwachungsschleife mindestens alle 2,5 Sekunden (Beginn der Runde → Beginn der Verarbeitung (nach Ablauf von maximal 2,5 s) → Abschluss der Verarbeitung (2,5 s) → Es ist umständlich, weil es notwendig ist, die Runde zu beenden.); [^ 3]

"Was zu schneiden" Problem

Übersicht und Präzedenzfälle

13 Ich habe nach einem Programm gesucht, das die Kacheln ausgibt, die durch Eingabe der Hand- und Tsumo-Kacheln weggeworfen werden sollen. Das gibt es nicht. Vielmehr war das Mahjong-Spiel + KI-Gebiet mitten im Wettbewerb um dieses Gebiet. Es tut mir leid, Senioren.

Außerdem ist mein Ziel nicht "die stärkste majanische KI, an die ich gedacht habe", sondern ein BOT, der so nass spielt, dass das Spatzenseelenmanagement nicht als Roboter bestimmt werden kann, also werde ich diesen Bereich angemessen gestalten.

Ich habe versucht, es in den berühmten Amazonas namens Github mit dem Schlüsselwort "Mahjong" zu unterteilen.

Der Urteilsteil "Wie viele Schnitte" stammt aus der Mahjong-Anwendung "Denno Masho", die auf HTML5 + JavaScript ausgeführt wird https://github.com/kobalab/Majiang [Operation Demo] http://kobalab.net/majiang/dapai.html

Das sah ziemlich gut aus. Der Autor hat in seinem Blog ein Protokoll über die Schwierigkeiten im Zusammenhang mit der "Cut What" -Richtungslogik hinterlassen. Ich denke, dass dies für diejenigen, die die stärkste KI anstreben, sehr hilfreich sein wird.

Da es sich jedoch um Javascript handelt, ist es etwas mühsam, die Dateneingabe / -ausgabe von Python zu verbinden. .. .. Ich suchte nach etwas, das so verwendet werden kann, wie es in Python ist.

Übernahme des maschinellen Lernens

Wie viele Mahjong-AIs durch tiefes Lernen https://github.com/hogeki/dlmahjong

Für diejenigen, die noch nie maschinelles Lernen berührt haben, ist es etwas schwierig, mich zu lesen. Daher wird das Verfahren nach dem Klonen von Git zur Arbeit unten beschrieben.

Zuerst werden wir TensorFlow [^ 4] mit pip einführen, aber hier ist es glücklicher, wenn die Versionen genau übereinstimmen. Ernsthaft. Sie sollten die Geschichte der menschlichen Säule hören (wahres Gesicht)

pip tensorflow==1.70 (2020.8.5 Folgen Sie dem Inhalt des aktuellen Git-Repositorys)

Zum Glück sind auch Tenhos Score-Daten (.txt) enthalten, sodass Sie sie so wie sie sind lernen und als Parameter speichern können.

python mahjong_ai.py --train --save

Die Trainingsergebnisparameter sollten jetzt als externe Daten gespeichert werden (trainiertes Modell / trainiertes Modell). In Zukunft wird es unter Verwendung dieses Modells als Argument möglich sein, eine Urteilsverarbeitung durchzuführen.

Da die Funktion "13 + 1-Kacheldaten als Information übergeben und angeben, was geschnitten werden soll" im entsprechenden Git-Skript nicht implementiert ist (nur kontinuierliche Tests und deren Leistungsbewertung werden später beschrieben). Sie müssen das Teil selbst machen. Der Code ist unten.

Wenn Sie die Informationen von Handplättchen + Tsumo-Plättchen als Argument mit der Zeichenkette der Tenho-Spezifikation eingeben, erfahren Sie, was geschnitten werden soll. (Das obige Trainingsmodell ist das Standardargument.)

Implementierungsskript

mahjong_ai.py(Zusätzlicher Teil)


#calc_Da soll die dahai-Funktion aus einer externen Datei aufgerufen werden
#Mahjong die beiliegende Akte_ai.Lesen Sie die Datei, die beim Import an py angehängt wurde
import mahjong_common as mjc
import mahjong_loader as mjl

#Hinzufügen von Import aufgrund von Funktionserweiterung
import unicodedata
import re

def init_sess():

    #calc_Da soll die dahai-Funktion aus einer externen Datei aufgerufen werden
    #Machen Sie den Teil, der sess setzt, zu einer Funktion und speichern Sie ihn global.
    # (Mahjong darüber, was Sess ist_common.Kann von py gelesen werden)
    global sess
    
    make_model()
    saver = tf.train.Saver()
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    sess.run(tf.local_variables_initializer())
    saver.restore(sess, "ckpt/my_model")

def calc_dahai(hands_str,tsumo_str):

    #Beispiel für die Eingabe des ersten Arguments
    #hands_str="6p6p7p8p3s4s5s5s7s8s Ost Ost Ost"

    #Beispiel für die Eingabe eines zweiten Arguments
    #tsumo_str="6s"

    #Init vor der Ausführung_sess()Wenn Sie dies nicht tun, wird es nicht funktionieren
    global sess

    #Konvertieren Sie eine handwerkliche Zeichenfolge in ein Array von Zeichenfolgen für jedes Handwerk
    tehai_tmp=[]

    #Da 1-Byte-Zeichen und 2-Byte-Zeichen gemischt und schwer zu verarbeiten sind, konvertieren Sie von 2-Byte-Zeichen in 1-Byte-Zeichen
    #(Es ist eine scheißartige Spezifikation, aber es kann nicht geholfen werden, weil die Eingabedaten von Tenho so sind.)
    hands_str = hands_str.replace('Osten', 'HI')
    hands_str = hands_str.replace('Süden', 'MI')
    hands_str = hands_str.replace('Westen', 'NI')
    hands_str = hands_str.replace('Norden', 'KI')
    hands_str = hands_str.replace('Weiß', 'SI')
    hands_str = hands_str.replace('Abfahrt', 'HA')
    hands_str = hands_str.replace('Während ~', 'NA')
        
    #Alle 2 Zeichen in einem Array speichern
    tehai_str_list_by_2char = re.split('(..)',hands_str)[1::2]

    #Zeichen rückgängig machen
    tehai_str_list_by_2char = [s.replace('HI', 'Osten') for s in tehai_str_list_by_2char]
    tehai_str_list_by_2char = [s.replace('MI', 'Süden') for s in tehai_str_list_by_2char]
    tehai_str_list_by_2char = [s.replace('NI', 'Westen') for s in tehai_str_list_by_2char]
    tehai_str_list_by_2char = [s.replace('KI', 'Norden') for s in tehai_str_list_by_2char]
    tehai_str_list_by_2char = [s.replace('SI', 'Weiß') for s in tehai_str_list_by_2char]
    tehai_str_list_by_2char = [s.replace('HA', 'Abfahrt') for s in tehai_str_list_by_2char]
    tehai_str_list_by_2char = [s.replace('NA', 'Während ~') for s in tehai_str_list_by_2char]

    #Mahjong eine Reihe von handwerklichen Saiten_common.Konvertieren Sie in ein durch py bestimmtes Zahlenarray
    for tehai_one in tehai_str_list_by_2char:#tehai_tmp:
        h = mjc.get_hai_number(tehai_one)
        tehai_num_array[h] += 1
    
    print("--------Mahjong AI Urteil Ergebnis--------")

    tstr = mjc.get_string_from_tehai(tehai_num_array)
    print("Handwerk:" + tstr)

    tsumo = mjc.get_hai_number(tsumo_str)
    print("Eigenständigkeit:" + mjc.get_hai_string(tsumo))

    tehai_num_array[tsumo] += 1

    #Da gibt es auch eine Funktion, die bestimmt, ob es gedreht wurde oder nicht
    #Es ist auch möglich, Noten zu sammeln oder sie einzeln verarbeiten zu lassen
    #if mjc.is_agari(tehai_num_array):
    #    print("Fertigstellung")
    
    #Urteilsverarbeitung durch maschinelles Lernen
    ai_outs = sess.run(out, feed_dict={x:[tehai_num_array]})

    dahai = get_ai_dahai(tehai_num_array, ai_outs[0])
    #print("Schlagen:" + mjc.get_hai_string(dahai))

    return(mjc.get_hai_string(dahai))

Abgesehen vom Hauptzweck dieses Artikels wird als Funktion, die der ursprüngliche Zweck dieses Git-Repositorys ist, unter Verwendung des erlernten und vervollständigten Modells ein zufälliger Mahjong-Tsumo-Simulator geloopt und eine ausreichende Anzahl von Versuchen durchgeführt. Es ermöglicht das Testen der Tempai-Rate usw. in.

python mahjong_ai.py --run

image.png [Ergebnis der 1000-fachen Simulation]

Wenn Sie die Funktionalität der KI verbessern möchten, können Sie mehr Score-Daten für das Lernen sammeln oder Profis und gute Leute ausbilden. Es ist interessant, weil das Ändern der Trainingsdaten die Testergebnisse ändert.

Ich werde hier nicht auf die Beschreibung des maschinellen Lernens eingehen, aber ich habe Sie gebeten, kurz auf die Grundlagen des maschinellen Lernens einzugehen. Spielen Sie also bitte damit herum. ~~ Und wenn du eine gute KI hast, gib sie mir bitte ~~ Übrigens scheint es zu diesem Zeitpunkt ein wenig schwierig zu sein, eine große Menge von Tenhos Score-Daten zu sammeln. Wenn es ein gutes Skript gibt, das Daten sammeln kann, teilen Sie es bitte in den Kommentaren mit, und alle Menschen ~~ und hauptsächlich ich ~~ werden gespeichert.

Maussimulation

Ich habe verschiedene Dinge ausprobiert, aber das folgende Tutorial war leicht zu verstehen. Sobald Sie das gewünschte Modul weitergeleitet haben, können Sie es kopieren.

Lassen Sie Python iterativ mit PyAutoGui arbeiten https://qiita.com/hirohiro77/items/78e26a59c2e45a0fe4e3

Die Taschenrechner-App wird vor Ihnen gestartet und Sie können die Maus ohne Erlaubnis ziehen. Auf den ersten Blick applaudierte ich sogar "Oh".

Wenn Sie nur den Teil kopieren und einfügen, der zum Klicken mit der Maus erforderlich ist, und auf die durch die obige Operation berechnete Koordinatenposition klicken, ist dies in Ordnung

Kneten und mischen Sie die drei Elemente, um sie zu vervollständigen. Die Codebeschreibung wird nicht mehr weggelassen. Wenn es Nachfrage gibt, werde ich sie auf git erhöhen.

Betriebszustand (Video)

Jantama Video abspielen Klicken Sie auf die Miniaturansicht, um zum Link zu YouTube zu springen

Es ist ein Spiel mit mittlerem Geruch, aber es sieht so aus, als hätten Sie eine Auswahl an Kacheln für Agari getroffen.

Mechanko Es ist eine Stärke der Maschine, dass sowohl die einfache Fliesenauswahl als auch die für den Menschen etwas verwirrende Fliesenauswahl gleichzeitig verarbeitet werden können.

Die aktuellen Probleme sind wie folgt.

(1) Ich habe es geschafft, 18 Schläge zu machen, so dass ich meine 20 Sekunden nicht verbrauchen konnte, aber je nach Situation konnte ich meine Zeit überschreiten.

In diesem Teil gibt es Raum für Refactoring, aber es ist mir egal, weil es in Ordnung ist, aufgrund einer Auszeit zu verlieren.

Schließlich erwarte ich kein Pop oder Chee, daher scheint die Verarbeitung stabiler zu sein, wenn Sie beim Spielen immer die Option "Kein Quietschen" auswählen.

(2) Da die Daten zum Zeitpunkt des Lernens keine Informationen zu den verlassenen Kacheln anderer Familien und Dora enthalten, werden die Treffer auch dann nicht erschüttert, wenn die andere Familie wie im Video erreicht, und die Dora-Kacheln werden verworfen, ohne sich darüber Gedanken zu machen ( Lol)

Wenn Sie sich für maschinelles Lernen interessieren und diese Funktion verbessern möchten, müssen Sie im nächsten Schritt Dora-Informationen und Informationen zu Selbstwind / Feldkälte lernen. Es ist ein wichtiger Schritt, die Funktionalität so zu erweitern, dass Daten mit unterschiedlichen Dimensionen (dh der Bedeutung der Daten) als ein Eingabeparameter trainiert werden. (Mahjong_common.py Seite muss repariert werden)

(Wenn jedoch Flussinformationen und Reichweiteninformationen anderer Familien in das Lernen einbezogen werden, werden die Eingabeparameter enorm, und wenn Sie sie nicht richtig entwickeln, ist der stabile Betrieb selbst schwierig.)

③ Damaten, Hearing und Dark Can werden nicht unterstützt.

Nach dem Konzept selbst ist es eine Maschine, die in einer geraden Linie auf Tsumoagari zielt.

danach

Es wurde verboten (lacht)

Es ist ein Witz, also habe ich die Anzahl und Häufigkeit des Vorlagenabgleichs und das Verarbeitungsverfahren überarbeitet, um nicht die Zeit zu verlieren, und versucht, es in Ligaspielen zu verwenden.

Sie können gewinnen, verlieren oder verlieren, aber schließlich wird die Maschine nicht müde, sodass sie die ganze Zeit spielt. (Derzeit in Bearbeitung, nur während mein Computer läuft ...)

Ich möchte die Fähigkeit des Modells messen, das einfach die zu Beginn eingeführten Tenho-Daten in git trainiert hat, um sich endgültig in welcher Liga zu stabilisieren.

Ich möchte es zu einem späteren Zeitpunkt noch einmal hinzufügen, also freuen Sie sich bitte darauf.

◆ Über die Angst vor einer Verletzung von Rechten an der Spatzenseelenseite im Artikel

Dieses Mal habe ich ein Video von Jakutama über die In-Service-Nutzung von BOT und den Artikel gepostet, den die Management-Seite von Jakutama möglicherweise nicht beabsichtigt hat, der jedoch in einem Bereich verwendet wird, der nicht im Widerspruch zu den offiziellen Richtlinien und dem Urheberrecht usw. steht. Wir haben festgestellt, dass wir nicht verletzt haben. Wenn Sie jedoch dasselbe in Bezug auf diesen Artikel tun, tun Sie dies bitte auf eigenes Risiko. Als Referenz werden wir die Nutzungsbedingungen der Spatzenseele vorstellen, die im Widerspruch zu den folgenden stehen können.

Richtlinien für die Verbreitung von Live-Spielen und die Veröffentlichung von Videos (Auszüge aus verbotenen Gegenständen)

・ Verwenden Sie es für andere Zwecke als die Live-Übertragung des Spiels, z. B. für Politik, Religion, ** Förderung bestimmter Überzeugungen ** ~~ (zutreffend w) ~~

Jakutama Nutzungsbedingungen, Artikel 11 Verbote

(12) Der Akt des illegalen Erwerbs verschiedener Inhalte, die von der Gesellschaft über diesen Dienst bereitgestellt werden, oder der Akt der Werbung dafür. ~~ (Erhalten von Gacha-Belohnungen durch BOT-Operation usw.) ~~ (16) Handlungen, die den Betrieb und die Nutzung dieses Dienstes beeinträchtigen oder beeinträchtigen können. (21) Handlungen gemäß den vorstehenden Punkten und andere Handlungen, die das Unternehmen für unangemessen hält.

[^ 1]: Eine spätere Überprüfung ergab, dass das Seitenverhältnis möglicherweise leicht schwankt, aber im Fehlerbereich zu liegen scheint. In meinem Skript habe ich beschlossen, die vertikalen und horizontalen Skalen getrennt zu messen und zu korrigieren.

[^ 2]: Ich denke, es gibt verschiedene Theorien zu diesem Inhalt, aber es ist meine beste Praxis. Es ist ein Problem, das immer dann auftritt, wenn Sie eine Technik namens Template Matching anwenden. Kennen Sie jedoch eine andere gute Methode (in kürzerer Zeit)?

[^ 3]: Ich habe in den Projekten, an denen ich bisher teilgenommen habe, noch kein Refactoring versucht. Hauptsächlich wegen mangelnder Ressourcen oder Motivation. .. ..

[^ 4]: TensorFlow ... Eine von Google entwickelte und als Open Source für das maschinelle Lernen veröffentlichte Softwarebibliothek.

Recommended Posts

Eine Geschichte über die Automatisierung von Online-Mahjong (Jakutama) mit OpenCV und maschinellem Lernen
Eine Geschichte über maschinelles Lernen mit Kyasuket
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Geschichte rund um die Datenanalyse durch maschinelles Lernen
Eine Geschichte über die Vorhersage des Wechselkurses mit Deep Learning
Erstellen Sie mit VirtualBox und Ubuntu eine Scikit-Lernumgebung für maschinelles Lernen
(Hinweis) Eine Geschichte zum Erstellen eines Frage- und Antwortsystems mit Spring Boot und maschinellem Lernen (SVM).
Maschinelles Lernen Eine Geschichte über Menschen, die mit GBDT in GBDT in Python nicht vertraut sind
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Persönliche Notizen und Links zum maschinellen Lernen ① (Maschinelles Lernen)
Eine Geschichte über Python Pop und Append
Vulkan berechnet mit Python mit VkInline und denkt über maschinelles Lernen auf der GPU und mehr nach
Eine Geschichte, die von Go's globalen Variablen und ihrem Umfang abhängig ist
Eine Geschichte über das Erreichen einer Wiederherstellungsrate von Pferderennen von über 100% durch maschinelles Lernen
Eine Geschichte über die Implementierung eines Anmeldebildschirms mit Django
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Eine Geschichte darüber, wie Windows 10-Benutzer eine Umgebung für die Verwendung von OpenCV3 mit Python 3.5 erstellt haben
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV
Bis Sie mit Python unter Windows 7 eine maschinelle Lernumgebung erstellen und ausführen
Maschinelles Lernen mit Raspberry Pi 4 und Coral USB Accelerator
Geschichte der Verwendung von Resonas Software-Token mit 1Password
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Die Geschichte, mit Python eine Hanon-ähnliche Partitur zu machen
Fühlen wir uns wie ein Materialforscher mit maschinellem Lernen
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Eine Geschichte über Kindergärten, Kindergärten und Kindergärten
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Die Geschichte, wie theano mit TSUBAME 2.0 verwaltet wurde
Praktisches maschinelles Lernen mit Scikit-Learn und TensorFlow-TensorFlow gab auf-
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Sprechen Sie mit Cython über die Verbesserung des Engpasses bei Algorithmen für maschinelles Lernen
Maschinelles Lernen Über Overlearning
So zeichnen Sie interaktiv eine Pipeline für maschinelles Lernen mit scikit-learn und speichern sie in HTML
Die Geschichte, einen PyPI-Cache-Server (mit Docker) aufzubauen und mich wieder ein wenig glücklich zu machen
(Erster Beitrag) Eine Geschichte über die numerische Berechnung von Influenza und neuem Lungenentzündungs-Coronavirus mit Tensorflow
[Maschinelles Lernen] Starten Sie Spark mit iPython Notebook und probieren Sie MLlib aus
Erstellen Sie eine maschinelle Lernumgebung auf einem Mac (pyenv, deeplearning, opencv).
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Eine Geschichte über den Wettbewerb mit einem Freund in Othello AI Preparation
Was ich über KI / maschinelles Lernen mit Python gelernt habe (4)
Eine Geschichte über die Installation von matplotlib mit pip mit einem Fehler
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ②
Eine Geschichte über den Umgang mit dem CORS-Problem
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ①
Maschinelles Lernen mit Nogisaka 46 und Keyakizaka 46 Teil 1 Einführung
Eine Geschichte über das zufällige Erstellen eines kurzen Songs mit Sudachi Py
Eine Geschichte über einen 40-jährigen Ingenieurmanager, der "Deep Learning for ENGINEER" bestanden hat
Eine Geschichte über einen Python-Anfänger, der mit dem No-Modul'http.server 'feststeckt.
Eine Geschichte über die Vorhersage von Präfekturen aus Städtenamen mit Jubatus
Maschinelles Lernen mit Pokemon gelernt
Über das Lernen mit Google Colab
Maschinelles Lernen mit Python! Vorbereitung
Über maschinelles Lernen gemischte Matrix
Maschinelles Lernen Minesweeper mit PyTorch