[PYTHON] Versuchen Sie, die LED in Ihren eigenen PC einzubauen (leicht)

Hallo.

Vor kurzem bin ich Yukari, der auch ein LED-Shop im professionellen Bereich ist. Nun, nach der neuesten Mode. Oiler wollte auch "den PC mit einer LED zum Leuchten bringen". Ich habe es versucht.

Ergebnis

In solch einer Situation! Dsc03705.jpg

Vorbereitung

Es ist in Ordnung, wenn Sie Materialien sammeln, die die folgenden Bedingungen erfüllen, und dies mit Topfalchemie tun.

――Ein Fall, in dem Sie LEDs hineinstecken und die LEDs von außen sehen können.

Nun, ich suchte nach einem Koffer mit einer "Glas- oder Acrylfront". Ich habe einen Fall von NZXTs H510i Elite gemacht. Nun, eine einfache Wasserkühlung namens "kraken M22" wurde eingeführt, damit die Abwärme der CPU abgeführt werden konnte.

LED-Auswahl

Abhängig von der Größe der Knospe gibt es mehrere Arten von "HUB75-Vollfarbmatrix-LEDs", die heutzutage beliebt sind. Die Zahl nach dem "P" in der Modellnummer entspricht der Größe der Krempe. Das diesmal ausgewählte Gehäuse scheint in der Lage zu sein, zwei Lüfter von 12 cm bis 14 cm auf der Vorderseite zu halten. Wählen Sie eine Größe, die so aussieht.

Wenn es sich beispielsweise um 32 x 64 P5 handelt, ist die Größe "16 cm x 32 cm", was etwas groß ist. Wenn Sie die typische Auflösung und Größe tabellieren, sieht es so aus.

Tonhöhe Größe Größe
P2 64x128 12.8cm x 25.6cm
P2.5 32x64 8.0cm x 16.0cm
P3 32x64 9.6cm x 19.2cm
P4 32x64 12.8cm x 25.6cm
P5 32x64 16.0cm x 32.0cm
P6.67 32x64 21.3cm x 42.6cm

Nun, diesmal habe ich mich für das Top "P2 64x128" entschieden. Vielleicht macht es mehr Spaß, eine Lösung zu haben. Wenn die kurze Seite 64 Punkte oder mehr beträgt, besteht eine hohe Wahrscheinlichkeit, dass die Adresszeile "E" erforderlich ist. Bitte seien Sie vorsichtig bei der Auswahl der Karte, die später beschrieben wird.

Raspetorte und Schnittstellenvorbereitung

Verwenden Sie den Raspberry Pi, um ihn zum Leuchten zu bringen.

Dieses Mal habe ich "Raspberry Pi4 4GB" gewählt. Der Fall ist angemessen, aber da GPIO verwendet wird, ist der offizielle Fall streng. Dsc03691.jpg

Als nächstes kommt die LED-Schnittstellenkarte. Diesmal entschied ich mich für das alte Adafruit-Brett, das ich übrig hatte. Dsc03690.jpg

Jedoch! Die folgenden zwei Änderungen sind erforderlich.

Wenn man sich auf diese Beschreibung bezieht, fühlt es sich an, als würde man zwei Linien und einen Schnitt hinzufügen. Es gibt zwei Muster der Adress-E-Leitung. Überprüfen Sie daher zuerst mit einem Tester usw., welches Panel Sie verwenden. Die nicht verwendete Adresse E fällt auf GND.

https://github.com/hzeller/rpi-rgb-led-matrix

Die Verkabelung ist ordnungsgemäß mit Polyimid befestigt. Dsc03689.jpg

Versammlung

Zunächst sieht die Vorderseite so aus. Dsc03697.jpg

Die Rückseite ist mit M3-Schrauben am Steg des 12-cm-Lüfters befestigt. Dsc03698.jpg

Es wird so aussehen, wenn Sie es einfügen. Dsc03684.jpg

Das allein ist einsam, also habe ich auch eine LED auf den Boden gelegt. Dsc03685.jpg

Dieser Typ ist mit Magneten und Halterungen an den vier Ecken befestigt. Dsc03686.jpg

Dieser Magnet wird im LED-Shop neben Sengoku Densho in Akihabara, Benribenri, verkauft. Dsc03687.jpg

https://www.akiba-led.jp/product/1197

Die LED verbindet die untere LED mit dem Raspeltorte und verbindet sich dann mit einer Kette mit der vorderen LED. Dies ist lediglich eine Verkabelung.

Die Stromversorgung erfolgt über SATA. Nun, es ist ein langjähriges Versprechen, aber die Stromversorgung für PCs ist im Allgemeinen "gelb: 12 V", "rot: 5 V", "orange: 3,3 V" und "schwarz: GND". Mit RaspberryPi4 und LED scheint es 5A oder mehr zu verwenden, aber es ist in Ordnung, da es sich um ein PC-Netzteil handelt (entsprechend). Dsc03693.jpg

Die Schnittstelle zwischen Raspberry Pi und PC verwendet LAN. Die PC-Seite ist USB LAN. Verwenden Sie für USB den Konvertierungsanschluss für das Gehäuse aus der Kopfzeile des Motherboards. Dsc03694.jpg

Die Verbindung um den Raspberry Pi sieht so aus. Dsc03695.jpg

Schieben Sie danach den Raspeltorte in die Lücke hinter dem Netzteil des H510i Elite, und der Vorgang ist abgeschlossen. Dsc03696.jpg

Eingebaute Fertigstellung

Nun, mit anderen Worten, dieser PC. Es ist ein "Dual Configuration PC", der in zwei Umgebungen lebt. Von außen sieht es aus wie ein normaler PC. Dsc03682.jpg

Die Rückseite ist auch ein gewöhnlicher PC. Dsc03683.jpg

Es wird nicht mit dem echten NZXT-Steuermechanismus "HUE2" gewettet. Dsc03688.jpg

Während die Dinge bis zu diesem Punkt gehalten werden, ist es "keine Änderung des Falles".

Vorbereitung auf der PC-Seite

Auf der PC-Seite ist eine Überwachungssoftware erforderlich. Dieses Mal habe ich "Open Hardware Monitor" verwendet. Diese Software verfügt über eine Webserverfunktion, sodass ich die Situation von außen erfassen kann. Es ist eine Strategie, den JSON für das Rendern auf der Raspeye-Seite zu verwenden. https://forest.watch.impress.co.jp/docs/review/383668.html

Die oben genannte Software unterstützt jedoch nicht die aktuelle Architektur. Eigentlich verwende ich "LibreHardwareMonitor" von Nora Build von der folgenden URL. http://takkun87.blog40.fc2.com/blog-category-6.html

Wenn Sie den Webserver aktivieren, das F / W entsprechend einstellen und den folgenden JSON von außen erhalten, ist dies erfolgreich. http://[IPアドレス]:8085/data.json

Der Inhalt sieht folgendermaßen aus (Teilauszug):

data.json


{
    "id": 0,
    "Text": "Sensor",
    "Min": "Min",
    "Value": "Value",
    "Max": "Max",
    "ImageURL": "",
    "Children": [
        {
            "id": 1,
            "Text": "DESKTOP-HOGEHOGE",
            "Min": "",
            "Value": "",
            "Max": "",
            "ImageURL": "images_icon/computer.png ",
            "Children": [
                {
                    "id": 2,
                    "Text": "ASRock Z390 Phantom Gaming 6",
                    "Min": "",
                    "Value": "",
                    "Max": "",
                    "ImageURL": "images_icon/mainboard.png ",
                    "Children": [
                        {
                            "id": 3,
                            "Text": "Nuvoton NCT6791D",
                            "Min": "",
                            "Value": "",
                            "Max": "",
                            "ImageURL": "images_icon/chip.png ",
                            "Children": [
                                {
                                    "id": 4,
                                    "Text": "Voltages",
                                    "Min": "",
                                    "Value": "",
                                    "Max": "",
                                    "ImageURL": "images_icon/voltage.png ",
                                    "Children": [
                                        {
                                            "id": 5,
                                            "Text": "Vcore",
                                            "Min": "1.392 V",
                                            "Value": "1.392 V",
                                            "Max": "1.408 V",
                                            "SensorId": "/lpc/nct6791d/voltage/0",
                                            "Type": "Voltage",
                                            "ImageURL": "images/transparent.png ",
                                            "Children": []
                                        },
                                        {
                                            "id": 6,
                                            "Text": "Voltage #2",
                                            "Min": "1.680 V",
                                            "Value": "1.688 V",
                                            "Max": "1.688 V",
                                            "SensorId": "/lpc/nct6791d/voltage/1",
                                            "Type": "Voltage",
                                            "ImageURL": "images/transparent.png ",
                                            "Children": []
                                        },
                                        {
                                            "id": 7,
                                            "Text": "AVCC",
                                            "Min": "3.488 V",
                                            "Value": "3.488 V",
                                            "Max": "3.488 V",
                                            "SensorId": "/lpc/nct6791d/voltage/2",
                                            "Type": "Voltage",
                                            "ImageURL": "images/transparent.png ",
                                            "Children": []
                                        },
                                        {
                                            "id": 8,
                                            "Text": "3VCC",
                                            "Min": "3.488 V",
                                            "Value": "3.488 V",
                                            "Max": "3.488 V",
                                            "SensorId": "/lpc/nct6791d/voltage/3",
                                            "Type": "Voltage",
                                            "ImageURL": "images/transparent.png ",
                                            "Children": []
                                        },
                                        {
                                            "id": 9,
                                            "Text": "Voltage #5",
                                            "Min": "1.016 V",
                                            "Value": "1.032 V",
                                            "Max": "1.032 V",
                                            "SensorId": "/lpc/nct6791d/voltage/4",
                                            "Type": "Voltage",
                                            "ImageURL": "images/transparent.png ",
                                            "Children": []
                                        },
                                        {
                                            "id": 10,
                                            "Text": "Voltage #6",
                                            "Min": "1.088 V",
                                            "Value": "1.088 V",

Weisen Sie danach dem USB-LAN und dem Raspeye Ihres PCs eine geeignete lokale IP zu, um die Kommunikation zu sichern.

Raspetortenvorbereitung

Was zu tun ist, ist so

Informationen zur Bibliothek für LED-Panels finden Sie unter der folgenden URL. https://qiita.com/eucalyhome/items/e871e297bfd527ccaf2c

Programm

Ich habe versucht, "Statusanzeige" und "Lebensspiel (Änderungen der Geschäftigkeit je nach Temperatur)" zu implementieren. Die LEDs sind miteinander verkettet, sodass die ersten 128 Punkte für Lebensspiele und die letzten 128 Punkte für die vertikale Statusanzeige bestimmt sind.

ledstat.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image, ImageDraw, ImageOps, ImageFont, ImageFilter, ImageChops, ImageColor
from rgbmatrix import RGBMatrix, RGBMatrixOptions
import time, re, copy, os, codecs, random, datetime, json
import numpy as np
from scipy import signal

class ledworker(object):
    def ledinit(self):
        self.options = RGBMatrixOptions()
        self.options.hardware_mapping = "adafruit-hat-pwm"
        self.options.led_rgb_sequence = "RGB"
        self.options.rows = 64
        self.options.chain_length = 8
        self.options.parallel = 1
        self.options.pwm_bits = 11
        self.options.brightness = 50
        self.options.pwm_lsb_nanoseconds = 130
        self.options.gpio_slowdown = 1
        self.options.panel_type = "FM6126A"
        self.matrix = RGBMatrix(options = self.options)

    def ledoutput(self,handle):
        self.matrix.SetImage(handle)

    def imagenew(self):
        imagecolorspace = 'RGB'
        imagecolorfill = (0, 0, 80)
        imagesizex = 256
        imagesizey = 64
        image = Image.new(imagecolorspace, (imagesizex, imagesizey), imagecolorfill)
        return (image)

class lifeworker(object):
    def initstate(self, width, height, init_alive_prob=0.5):
        N = width*height
        v = np.array(np.random.rand(N) + init_alive_prob, dtype=int)
        return v.reshape(height, width)

    def addstate(self, F, width, height, init_alive_prob=0.5):
        N = width*height
        v = np.array(np.random.rand(N) + init_alive_prob, dtype=int).reshape(height, width)
        v = F + v
        return v

    def countneighbor(self, F):
        mask = np.ones((3, 3), dtype=int)
        return signal.correlate2d(F, mask, mode="same", boundary="wrap")

    def nextgeneration(self, F):
        N = self.countneighbor(F)
        G = (N == 3) + F * (N == 4)
        return G

    def toimage(self, F):
        nparray = np.array(F, dtype=np.uint8)*255
        image = Image.fromarray(np.uint8(nparray)).convert("1")
        return image

class monitorworker(object):
    def getdata(self):
        datafile_hwdata = '/ramdisk/hwdata.json'
        outdata = {}
        outdata['cpuload'] = 0
        outdata['cputemp'] = 0
        outdata['gpuload'] = 0
        outdata['gputemp'] = 0
        outdata['cpuclock'] = 0

        if not os.path.exists(datafile_hwdata):
            return (outdata)
        try:
            with open(datafile_hwdata) as f:
                hwdata = json.load(f)
        except:
            return (outdata)

        for primarykey in hwdata['Children'][0]['Children']:
            if 'cpu' in primarykey['ImageURL']:
                for secondarykey in primarykey['Children']:
                    if 'Clocks' in secondarykey['Text']:
                        for thirdkey in secondarykey['Children']:
                            if 'CPU Core #1' in thirdkey['Text']:
                                outdata['cpuclock'] =re.sub("[^0-9\.]","",thirdkey['Value'])
                    if 'Load' in secondarykey['Text']:
                        for thirdkey in secondarykey['Children']:
                            if 'CPU Total' in thirdkey['Text']:
                                outdata['cpuload'] =re.sub("[^0-9\.]","",thirdkey['Value'])
            if 'nvidia' in primarykey['ImageURL']:
                for secondarykey in primarykey['Children']:
                    if 'Temperatures' in secondarykey['Text']:
                        outdata['gputemp'] = re.sub("[^0-9\.]","",secondarykey['Children'][0]['Value'])
                    if 'Load' in secondarykey['Text']:
                        outdata['gpuload'] = re.sub("[^0-9\.]","",secondarykey['Children'][0]['Value'])
            if 'mainboard' in primarykey['ImageURL']:
                for secondarykey in primarykey['Children'][0]['Children']:
                    if 'Temperatures' in secondarykey['Text']:
                        outdata['cputemp'] = re.sub("[^0-9\.]","",secondarykey['Children'][0]['Value'])
        outdata['cpuload'] = "{0:5.1f}".format(float(outdata['cpuload']))
        outdata['gpuload'] = "{0:5.1f}".format(float(outdata['gpuload']))
        outdata['cpuclock'] = "{0:4d}".format(int(outdata['cpuclock']))
        return (outdata)

def writetext(draw,hpos,message,color,font):
    w, h = draw.textsize(str(message), font)
    w = 48 - w
    draw.text((w,hpos), str(message), color,font=font)

def main():
    led = ledworker()
    led.ledinit()
    image = led.imagenew()
    fontdata = "./GDhwGoJA-OTF112b2.otf"

    life = lifeworker()
    lifedatablue = life.initstate(128, 64, init_alive_prob=0.08)
    lifedatagreen = life.initstate(128, 64, init_alive_prob=0.08)

    monitor = monitorworker()
    outdata = monitor.getdata()

    imagebasel = Image.open('/data/ledstat/nzx_log_w.png').convert("RGB")
    imagebasel = imagebasel.transpose(Image.ROTATE_180)
    imagebaseh = copy.copy(imagebasel)
    imagebaseh = imagebaseh.transpose(Image.ROTATE_90)
    imageh = copy.copy(imagebasel)
    image = Image.new('RGB', (256, 64), (0, 0, 0))
    image.paste(imageh,(128, 0))
    imagehtemp = copy.copy(imagebaseh)
    draw = ImageDraw.Draw(imagehtemp)
    font = ImageFont.truetype(fontdata, 16)
    fontsmall = ImageFont.truetype(fontdata, 7)

    addcount = 0
    while True:
        imageblue = life.toimage(lifedatablue)
        imagegreen = life.toimage(lifedatagreen)
        imagel = copy.copy(imagebasel)
        imagel.paste(Image.new("RGB", imagel.size, (0,255,255)), mask=imageblue)
        imagel.paste(Image.new("RGB", imagel.size, (0,0,255)), mask=imagegreen)
        image.paste(imagel,(128, 0))

        led.ledoutput(image)

        lifedatablue = life.nextgeneration(lifedatablue)
        lifedatagreen = life.nextgeneration(lifedatagreen)
        time.sleep(0.05)
        addcount = addcount + 1
        if addcount > 20:
            addcount = 0

            outdatatemp = monitor.getdata()
            if outdatatemp['cputemp'] != 0:
                outdata = outdatatemp
            blueseed = (float(outdata['cputemp'])-40) / 200
            greenseed = (float(outdata['gputemp'])-40) / 200
            if blueseed < 0:
                blueseed = 0
            if greenseed < 0:
                greenseed = 0
            lifedatablue = life.addstate(lifedatablue,128, 64, init_alive_prob=blueseed)
            lifedatagreen = life.addstate(lifedatagreen,128, 64, init_alive_prob=greenseed)
            lifedatablue = life.nextgeneration(lifedatablue)
            lifedatagreen = life.nextgeneration(lifedatagreen)

            imagehtemp.paste(imagebaseh,(0, 0))
            draw.text((0,0), "CPU", (0, 255, 255),font=font)
            writetext(draw,16,outdata['cpuload'],(255, 255, 255),font)
            draw.text((48,24), "%", (0, 255, 255),font=fontsmall)
            writetext(draw,32,outdata['cputemp'],(255, 255, 255),font)
            draw.text((48,40), "'C", (0, 255, 255),font=fontsmall)
            writetext(draw,48,outdata['cpuclock'],(255, 255, 255),font)
            draw.text((48,56), "MHz", (0, 255, 255),font=fontsmall)
            draw.text((0,74), "GPU", (0, 0, 255),font=font)
            writetext(draw,90,outdata['gpuload'],(255, 255, 255),font)
            draw.text((48,98), "%", (0, 0, 255),font=fontsmall)
            writetext(draw,106,outdata['gputemp'],(255, 255, 255),font)
            draw.text((48,116), "'C", (0, 0, 255),font=fontsmall)
            imageh = copy.copy(imagehtemp)
            imageh = imageh.transpose(Image.ROTATE_90)
            image.paste(imageh,(0, 0))

if __name__ == '__main__':
    main()

Für die Implementierung des Lebensspiels habe ich auf die folgende URL verwiesen. https://qiita.com/sage-git/items/c6c175887faa4cf737fb

Die vorausgesetzten Dateien lauten wie folgt 128x64 Hintergrundlogo: /data/ledstat/nzx_log_w.png Data.json für den PC-Status: /ramdisk/data.json Schriftart: ./GDhwGoJA-OTF112b2.otf

Die Schrift ist die auf der Autobahn, na ja, wenn Sie möchten. https://forest.watch.impress.co.jp/library/software/gdhighway/

Als nächstes ein geeignetes Programm, um JSON vom PC zu bekommen

getdata.py


import urllib.request
import json
import time

url = 'http://[ip address]:8085/data.json'
datafile = '/ramdisk/hwdata.json'

req = urllib.request.Request(url)

while True:
    try:
        with urllib.request.urlopen(req) as res:
            body = json.load(res)
        fw = open(datafile,'w')
        json.dump(body,fw,indent=4)
        fw.close()
    except:
        time.sleep(30)
    time.sleep(2)

Es funktioniert mit Python3 Note, na ja, skrupellos.

Die RAMDISK-Definition ist einfach. Erstellen Sie zunächst ein 777-Verzeichnis mit "/ ramdisk /" als root. Fügen Sie FSTAB "tmpfs / ramdisk tmpfs default, size = 16m 0 0" hinzu. Einfach "mount -a" oder neu starten. Wenn Sie df und "tmpfs 16384 84 16300 1% / ramdisk" haben, ist es OK.

Die Registrierung bei systemd sieht wie folgt aus.

/etc/system/getdata.service


[Unit]
Description=getdata

[Service]
ExecStart=/usr/bin/python3 /data/ledstat/getdata.py
Restart=always
Type=simple
User=pi

[Install]
WantedBy=multi-user.target

/etc/systemd/system/ledstat.service


[Unit]
Description=ledstat

[Service]
WorkingDirectory=/data/ledstat
ExecStart=/usr/bin/python /data/ledstat/ledstat.py
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target

Dann von "systemctl daemon -reload"

systemctl start getdata
systemctl enable getdata
systemctl start ledstat
systemctl enable ledstat

Mit einem Gefühl. Wenn ein Fehler auftritt, überprüfen Sie den Status.

Funktionsprüfung

Die Frontplatte sieht so aus! .. Dsc03709.jpg

Das untere Bedienfeld sieht folgendermaßen aus, wenn Sie nicht beschäftigt sind. Dsc03700.jpg

Wenn ich beschäftigt bin und die Temperatur steigt, bin ich verwirrt. Dsc03710.jpg

Es macht ziemlich viel Spaß w.

Versuche es zu tun

Ich meine. Ich frage mich, ob ich so etwas wie Öl machen könnte.

Übrigens sehe ich beim Spielen keinen anderen Computer. Es ist mit LED-Panels bedeckt, so dass die Temperatur zu steigen scheint. Erstens erzeugt die LED Wärme.

Es gibt nichts Gutes, worüber man ernsthaft nachdenken könnte. Es ist gut, weil es Spaß macht! .. Es ist wunderschön! ..

Manzoku! ..

Recommended Posts

Versuchen Sie, die LED in Ihren eigenen PC einzubauen (leicht)
Versuchen Sie, Daten in MongoDB abzulegen
Versuchen Sie, sich mit Python auf Ihrem PC automatisch bei Netflix anzumelden
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse
[Linux] Wie Sie Ihre IP in eine Variable einfügen
Versuchen Sie, Ihre eigenen Objekte mit Prioritätswarteschlangen in Python zu sortieren
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken (③ Stärkung des Lernens in Ihrer eigenen OpenAI Gym-Umgebung).
[Python] Anmelden Ihres eigenen Moduls
Versuchen Sie, k-NN selbst zu implementieren
Wechseln Sie von der Ubuntu-Installation zur Chainer-Installation, indem Sie Ihren eigenen PC erstellen
Überbrücken Sie ROS mit Ihrem eigenen Protokoll
Einführung in Deep Learning (2) - Versuchen Sie Ihre eigene nichtlineare Regression mit Chainer-
Probieren Sie Cython in kürzester Zeit aus
Fügen Sie Ihre eigenen Bilddaten in Deep Learning ein und spielen Sie damit
Fügen Sie mitmproxy Ihre eigene Inhaltsansicht hinzu
Versuchen Sie, sich mit Python bei qiita anzumelden
Erstellen Sie Ihre eigenen Linux-Befehle in Python
[LLDB] Erstellen Sie Ihren eigenen Befehl mit Python
Verwenden Sie einfach Ihre eigenen Funktionen in Python
Wenn Sie dasselbe wie zuvor verwenden, können Sie dies visualisieren, indem Sie Japan, China und Südkorea ausschließen, in denen viele Menschen infiziert sind. In diesem Fall lauten die Daten für "2020/02/21" wie folgt. Besonders auffällig sind Südostasien, Europa und Nordamerika. Ich hoffe es konvergiert so schnell wie möglich. .. .. Migrieren Sie Python, Pandas, Python3, Zeitreihendaten und eigene CMS-Daten nach WordPress
Versuchen Sie, NumPys add.at mit Julia zu reproduzieren
Machen Sie Ihren eigenen PC für tiefes Lernen
So importieren Sie Ihr eigenes Modul mit jupyter
So installieren Sie Ihre eigene (Root-) Zertifizierungsstelle
[V11 ~] Ein Memorandum für Misskey
Versuchen Sie, Ihr Tagebuch mit Python zu durchsuchen
Holen Sie sich Ihre eigene IP-Adresse in Python
Versuchen Sie, Ihre eigene CorDapp zu erstellen. (Bis zur Schaffung von Staaten)
Erste Schritte zum Testen von Google CloudVision in Python
Setzen Sie Linux in Chromebook ein und verwenden Sie R ...
Berechnen wir das statistische Problem mit Python
3,14 π Tag, versuchen Sie also, in Python auszugeben
Versuchen Sie automatisch, Enum in Python 3.6 automatisch zu bewerten
Versuchen Sie, Blueprint with Flask zu verwenden, um Controller zu trennen
3 Schritte, um Python + Mecab nur in yum zu setzen
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
So erstellen Sie Daten für CNN (Chainer)
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
Kommentieren Sie Ihre eigenen Daten, um Mask R-CNN zu trainieren
Importieren Sie Ihre eigenen Module mit der Python-Entwicklung von Grasshopper
Versuchen Sie, den _method-Parameter von Rails in webapp2 zu imitieren
Beispiel, um Python Kivy in eine Datei zu packen
Schritte zum Installieren Ihrer eigenen Bibliothek mit pip