![Sayansi ya Mtandao ya Neural Inayotumia Sayansi ya Chatu, Elektroni, na Kera: Hatua 8 Sayansi ya Mtandao ya Neural Inayotumia Sayansi ya Chatu, Elektroni, na Kera: Hatua 8](https://i.howwhatproduce.com/images/007/image-18238-j.webp)
Orodha ya maudhui:
- Hatua ya 1: Kuweka Mazingira Yako
- Hatua ya 2: Kusoma API ya Utafutaji wa NASA
- Hatua ya 3: Mtandao wa Mabadiliko ya Neural
- Hatua ya 4: Kusindika Picha
- Hatua ya 5: Kushona Picha Pamoja Katika Makadirio ya Mlinganyo
- Hatua ya 6: Hati kamili ya Python
- Hatua ya 7: Programu ya Electron
- Hatua ya 8: Utekelezaji
2025 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2025-01-23 15:11
![Mtandao wa Neural Planethi Inayotumia Python, Electron, na Keras Mtandao wa Neural Planethi Inayotumia Python, Electron, na Keras](https://i.howwhatproduce.com/images/007/image-18238-1-j.webp)
Katika hii inayoweza kufundishwa, nitakuonyesha jinsi nilivyoandika jenereta ya sayari ya 3D moja kwa moja, nikitumia Python na Electron
Video hapo juu inaonyesha moja ya sayari za nasibu ambazo programu ilitengenezwa.
** Kumbuka: Mpango huu sio kamili kabisa, na katika sehemu zingine sio Pythonic sana. Kibaguzi wa wavu wa neva ni sawa tu ~ 89%, kwa hivyo picha zingine zisizo za kawaida zitaifanya iwe kwenye sayari **
Maalum
Jumba la sayari linauliza NASA API ya picha zinazohusiana na nafasi, na hutumia mtandao wa neva wa kushawishi kuamua ikiwa picha inafaa kusindika. Programu hiyo hutumia OpenCV kuondoa mandharinyuma kutoka kwenye picha, na mwishowe picha zimeunganishwa pamoja kuwa picha moja kubwa ya usawa. Picha hii inahifadhiwa, na programu ya Electron Node.js inafungua picha, na hutumia kifurushi cha PhotoSphere.js kutazama picha hiyo katika muundo wa muundo wa sayari ya 3D.
Utegemezi
Chatu:
- Keras
- Mto
- cv2
- Numpy
- Maombi
- mkojo
- Bila mpangilio
- wakati
- io
Elektroni:
PichaSphere
Hatua ya 1: Kuweka Mazingira Yako
Kufunga Electron na Python
Kwanza, hakikisha una node.js na npm imewekwa (ikiwa sio, unaweza kupakua hapa)
Ifuatayo, unahitaji kufunga Elektroni. Fungua kidokezo cha amri, na weka amri ifuatayo:
npm kufunga elektroni -g
Ifuatayo, unahitaji chatu, ambayo inaweza kupakuliwa hapa
Kuanzisha Mazingira Halisi
Fungua kidokezo cha amri, kisha ingiza amri zifuatazo ili kuweka mazingira yako halisi:
bomba funga fadhila
nafasi ya wema
nafasi ya cd
hati / uanzishe
Kufunga Utegemezi wa Chatu
Endesha amri hizi kwa haraka ya amri kusanikisha utegemezi wako wa chatu:
bomba kufunga keras
bomba kufunga mto
bomba kufunga numpy
maombi ya kusanikisha bomba
bomba kufunga opencv-chatuIkiwa unataka kufundisha mtandao mwenyewe, hakikisha kusanidi kuongeza kasi kwa GPU kwa Keras
Hatua ya 2: Kusoma API ya Utafutaji wa NASA
Maelezo ya jumla
NASA ina APIs nyingi muhimu ambazo unaweza kutumia na miradi yako. Kwa mradi huu, tutatumia API ya utaftaji, ambayo inatuwezesha kutafuta hifadhidata ya picha ya NASA kwa picha zinazohusiana na nafasi.
Kanuni
Kwanza, tunahitaji kufafanua kazi ya chatu kukubali hoja ambayo itatumika kama neno la utaftaji:
def kupata_image_search (kifungu):
kupita
Ifuatayo, tutabadilisha neno la utaftaji kuwa fomati ya URL, kisha tumia maktaba ya maombi kuuliza API:
def kupata_image_search (kifungu):
params = {"q": urllib.parse.quote (arg), "media_type": "image"} results = requests.get ("https://images-api.nasa.gov/search", params = vifungu)
Mwishowe, tutamua mkusanyiko + kamba ya JSON ambayo API ilirudi kwetu, na tutaondoa orodha ya viungo vya picha zinazohusiana na neno la utaftaji:
def kupata_image_search (kifungu):
params = {"q": urllib.parse.quote (arg), "media_type": "image"} results = requests.get ("https://images-api.nasa.gov/search", params = vifungu) data = [matokeo ['href'] kwa matokeo ya matokeo.json () ["mkusanyiko"] ["vitu"]
Huko tunakwenda! Sasa tuna kijisehemu cha nambari ambacho kinaweza kuuliza API ya utaftaji wa picha ya NASA, na kurudisha orodha ya viungo kwa picha zinazohusiana na neno letu la utaftaji.
Hatua ya 3: Mtandao wa Mabadiliko ya Neural
Maelezo ya jumla
Kazi ya mtandao wa neva ni kuainisha ikiwa picha ni ya kitu angani, au ikiwa sio. Ili kufanya hivyo, tutatumia mtandao wa neva wa kushawishi, au CNN, kufanya safu ya shughuli za tumbo kwenye picha, na kuamua jinsi nafasi-ilivyo. Sitaelezea haya yote, kwa sababu kuna nadharia nyingi nyuma yake, lakini ikiwa unataka kujifunza juu ya mitandao ya neva, ninashauri "Ustadi wa Kujifunza Mashine"
Kanuni
Kwanza, tunahitaji kuagiza utegemezi wetu:
kuagiza os
# Rekebisha toleo wakati wa gari moshi la GPU os.environ ['CUDA_VISIBLE_DEVICES'] = "kuagiza tensorflow kama tf ikiwa tf.test.gpu_device_name (): chapa ('GPU imepatikana') mwingine: chapisha (" Hakuna GPU iliyopatikana ") kutoka kwa keras.preprocessing.image kuagiza ImageDataGenerator kutoka keras.kutengeneza picha ya kuagiza kutoka keras.models kuagiza Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense from keras kuagiza backend as K from PIL kuagiza Image kuagiza numpy kama np
Ifuatayo tunahitaji kufafanua mfano wetu:
img_width, img_height = 1000, 500
train_data_dir = 'v_data / train' validation_data_dir = 'v_data / test' nb_train_samples = 203 nb_validation_samples = 203 epochs = 10 batch_size = 8 if K. image_data_format () == 'channels_first': input_shape = = (img_width, img_height, 3) mfano = Sequential () model.add (Conv2D (32, (2, 2), input_shape = input_shape)) model.add (Activation ('relu')) model.add (MaxPooling2D (pool_size) = (2, 2))) mfano.. kuongeza (Conv2D (64, (2, 2))) mfano. ongeza (Dense (64)) model.add (Activation ('relu')) model.add (Dropout (0.5)) model.add (Dense (1)) model.add (Activation ('sigmoid')) model.compile (hasara = 'binary_crossentropy', optimizer = 'rmsprop', metrics = ['usahihi'])
Nimekufundisha mfano huo, lakini ikiwa ungependa kufundisha mfano huo mwenyewe, kwenye hifadhidata yako mwenyewe, basi nimeambatanisha nambari ya mafunzo. Vinginevyo, unaweza kupakua faili ya HDF5 ya mfano. Kwa sababu ya vizuizi vya faili za Maagizo, imenilazimu kuipatia jina jipya na kiendelezi cha ".txt". Ili kuitumia, badilisha faili kwa kiendelezi cha ".h5", na upakie na nambari hii:
modeli.zip_weights ("model_saved.h5")
Kutumia mtandao kutabiri jinsi nafasi-y picha ilivyo, tutafafanua kazi hii:
tabiri (picha_path):
img = image.load_img (image_path, target_size = (1000, 500)) img = np.expand_dims (img, mhimili = 0) matokeo = model.predict_class (img) matokeo ya kurudi [0] [0]
Hatua ya 4: Kusindika Picha
Maelezo ya jumla
Kwa usindikaji wa picha, ninatumia maktaba ya OpenCV (cv2). Kwanza, tutaficha kando ya picha, na kisha tutaondoa usuli kwa kuunda kinyago na kubadilisha maadili ya alpha ya rangi nyeusi
Kanuni
Hii ndio sehemu ya kazi inayoficha kingo:
mchakato wa defImage (img):
RADIUS = 20 # Fungua picha im = Image.open ("pilbuffer.png") # Bandika picha kwenye background nyeupe diam = 2 * RADIUS back = Image.new ('RGB', (im.size [0] + diam, im.size [1] + diam), (0, 0, 0)) back.paste (im, (RADIUS, RADIUS)) # Unda mask mask blur = Image.new ('L', (im.size [0)] + diam, im.size [1] + diam), 255) blck = Image.new ('L', (im.size [0] - diam, im.size [1] - diam), 0) kinyago. weka (blck, (diam, diam)) # Blur picha na ubandike makali yaliyofifia kulingana na mask blur = back.filter (ImageFilter. GaussianBlur (RADIUS / 2)) back.paste (blur, mask = mask) back.save (" kipindi cha mpito.png ") nyuma. karibu ()
Ifuatayo, tutaweka rangi nyeusi kuwa wazi, na tutahifadhi picha hiyo kwa muda:
#Tengeneza mask na kichungi ubadilishe nyeusi na alpha
picha = cv2.imread ("transition.png") hMin = 0 sMin = 0 vMin = 20 hMax = 180 sMax = 255 vMax = 255 chini = np.array ([hMin, sMin, vMin]) juu = np.array ([hMax, sMax, vMax]) hsv = cv2.cvtColor (picha, cv2. COLOR_BGR2HSV) mask = cv2.inRange (hsv, chini, juu) pato = cv2.bitwise_and (picha, picha, mask = mask) * _, alpha = cv2.split (pato) dst = cv2.merge ((pato, alpha)) pato = dst na open ("buffer.png", "w +") kama faili: pitisha cv2.imwrite ("buffer.png", pato)
Hatua ya 5: Kushona Picha Pamoja Katika Makadirio ya Mlinganyo
Maelezo ya jumla
Kazi hii inachukua picha nyingi na kuziunganisha katika muundo ambao unaweza kutafsiriwa na kifurushi cha PhotoSphere.js, ukitumia maktaba ya PIL (mto)
Kanuni
Kwanza, tunahitaji kuunda picha ambayo inaweza kuwa mwenyeji wa picha zingine:
mpya = Image.new ("RGBA", (8000, 4000), color = (0, 0, 0))
Ifuatayo, tunahitaji kupunguza idadi ya picha (ambazo zote zimebadilishwa kuwa 1000x500) na kuziweka kwenye picha:
h = 0
w = 0 i = 0 kwa img katika img_arr: mpya.bandika (img, (w, h), img) w + = 1000 ikiwa w == 8000: h + = 500 w = 0 i + = 1
Sasa tunaifunga hii kwa kazi ambayo inachukua safu ya picha kama hoja yake, na inarudisha picha mpya:
def kushona_beta (img_arr):
mpya = Image.new ("RGBA", (8000, 4000), color = (0, 0, 0)) h = 0 w = 0 i = 0 kwa img katika img_arr: new.paste (img, (w, h), img) w + = 1000 ikiwa w == 8000: h + = 500 w = 0 i + = 1 kurudi mpya
Hatua ya 6: Hati kamili ya Python
Huu ndio hati kamili ya mtandao wa python ya neva, ambayo imehifadhiwa kama net.py, na kuletwa kwenye hati kuu:
# kuagiza maktaba
kuagiza os #Fix kwa toleo wakati wa hatua ya treni ON GPU os.environ ['CUDA_VISIBLE_DEVICES'] = "kuagiza tensorflow kama tf ikiwa tf.test.gpu_device_name (): chapisha ('GPU imepatikana') mwingine: chapisha (" Hakuna GPU iliyopatikana) ") kutoka kwa keras.preprocessing.image kuagiza ImageDataGenerator kutoka keras.kutengeneza picha ya kuagiza kutoka keras.models kuagiza Sequential kutoka keras.layers kuagiza Conv2D, MaxPooling2D kutoka keras.layers kuagiza Activation, Dropout, Flatten, Dense from keras import backend as K from PIL kuagiza kuagiza picha numpy kama np img_width, img_height = 1000, 500 train_data_dir = 'v_data / train' validation_data_dir = 'v_data / test' nb_train_samples = 203 nb_validation_samples = 203 epochs = 10 batch_size = 8 if K.image_data ': input_shape = (3, img_width, img_height) mwingine: input_shape = (img_width, img_height, 3) model = Sequential () model.add (Conv2D (32, (2, 2), input_shape = input_shape)) model.add (Activation ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Conv2D (32, (2, 2))) mfano. ongeza (Activation ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Conv2D (64, (2, 2))) model.add (Activation ('relu')) modeli. model) "model_saved.h5") kutabiri (image_path): img = image.load_img (image_path, target_size = (1000, 500)) img = np. [0] [0]
Hii ndio faili kuu ya chatu, api.py:
kuagiza maombi, sys, nasibu, urllib.parse, cv2
kutoka PIL kuagiza Picha, ImageFilter kutoka io kuagiza BytesIO kuagiza numpy kama np kuagiza net def get_image_search (num, phrase): count = 0 img_arr = kwa arg katika kifungu: chapa (arg) chapa (f "Hesabu ya sasa ya picha: {hesabu } ") i = 0 params = {" q ": urllib.parse.quote (arg)," media_type ":" image "} results = requests.get (" https://images-api.nasa.gov/search ", params = params) data = [matokeo ['href'] ya matokeo ya matokeo.json () [" mkusanyiko "] [" vitu "] chapa (len (data)) ikiwa num> len (data): num = len (data) wakati hesabu
Hatua ya 7: Programu ya Electron
Maelezo ya jumla
Tutaunda programu rahisi ya elektroni ambayo inasimama na kubeba kipengee cha PhotoSphere. Faili kuu.js na package.json ni moja kwa moja kutoka kwa wavuti ya Electron, na HTML ni toleo lililobadilishwa kidogo la HTML iliyotolewa kwenye wavuti ya PhotoSphere. Nimejumuisha faili, lakini nikabadilisha yote kuwa.txt, kwani Maagizo hayaruhusu aina hizi za faili. Ili kutumia faili hizo, zipe jina jipya na kiendelezi kinachofaa.
Kanuni
kuu
const {app, BrowserWindow} = zinahitaji ('elektroni')
kazi createWindow () {const win = new BrowserWindow ({width: 800, height: 600, webPreferences: {nodeIntegration: true}}) win.loadFile ('index.html')} app.whenReady (). kisha (createWindow) programu.on ('windows-all-closed', () => {if (process.platform! == 'darwin') {app.quit ()}}) app.on ('activate', () => {if (BrowserWindow.getAllWindows (). length === 0) {createWindow ()}})
kifurushi.json
{
"jina": "nafasi", "toleo": "0.1.0", "kuu": "main.js", "maandishi": {"anza": "elektroni." }}
index.html
Hatua ya 8: Utekelezaji
Kuunda picha sawa
Ili kuunda picha, tumia hati ya api.py katika haraka ya amri, na mazingira yake halisi yameamilishwa:
api.py
Baada ya maandishi kumaliza kutekeleza, tumia programu ya elektroni ukitumia:
npm kuanzaVoila! Sayansi yako ya sayari inafanya kazi! Asante kwa kusoma:)
Ilipendekeza:
Elektroni (EMS): Hatua 5
![Elektroni (EMS): Hatua 5 Elektroni (EMS): Hatua 5](https://i.howwhatproduce.com/images/001/image-2045-25-j.webp)
Elektroni (EMS): Madhumuni ya mradi huu ilikuwa kulenga uundaji wa riwaya, utajiri wa hesabu ulioboreshwa kwa hesabu kwa madhumuni ya kielimu, kusudi ni kuwawezesha wanafunzi kubuni na kujenga matumizi yao ya hisia, na kwa kufanya hivyo watajifunza
Wadudu wa elektroni au wa Kubamba Oscillator: Hatua 9 (na Picha)
![Wadudu wa elektroni au wa Kubamba Oscillator: Hatua 9 (na Picha) Wadudu wa elektroni au wa Kubamba Oscillator: Hatua 9 (na Picha)](https://i.howwhatproduce.com/images/003/image-8274-j.webp)
Mdudu wa elektroni au Mchapishaji wa Oscillator: Utangulizi Nimekuwa nikifuata ukuzaji wa roboti kwa karibu miaka 10 na asili yangu ni Baiolojia na Upigaji picha. Maslahi haya yamezunguka shauku yangu ya msingi, entomolojia (utafiti wa wadudu). Wadudu ni mpango mkubwa katika indu nyingi
Ufuatiliaji wa Joto la ESP8266 Nodemcu Kutumia DHT11 kwenye Mtandao wa Mtandao - Pata Joto la Chumba na Unyevu kwenye Kivinjari chako: Hatua 6
![Ufuatiliaji wa Joto la ESP8266 Nodemcu Kutumia DHT11 kwenye Mtandao wa Mtandao - Pata Joto la Chumba na Unyevu kwenye Kivinjari chako: Hatua 6 Ufuatiliaji wa Joto la ESP8266 Nodemcu Kutumia DHT11 kwenye Mtandao wa Mtandao - Pata Joto la Chumba na Unyevu kwenye Kivinjari chako: Hatua 6](https://i.howwhatproduce.com/images/010/image-28545-j.webp)
Ufuatiliaji wa Joto la ESP8266 Nodemcu Kutumia DHT11 kwenye Mtandao wa Mtandao | Pata Joto la Chumba na Unyevu kwenye Kivinjari chako: Halo jamani leo tutafanya unyevu & mfumo wa ufuatiliaji wa joto kwa kutumia ESP 8266 NODEMCU & Sensor ya joto ya DHT11. Joto na unyevu utapatikana kutoka kwa Sensorer ya DHT11 & inaweza kuonekana kwenye kivinjari ambayo ukurasa wa wavuti utasimamia
Saa ya Mtandao ya ESP8266 bila RTC yoyote - Saa ya Nodemcu NTP Hakuna RTC - MRADI WA BAHATI YA MTANDAO: Hatua 4
![Saa ya Mtandao ya ESP8266 bila RTC yoyote - Saa ya Nodemcu NTP Hakuna RTC - MRADI WA BAHATI YA MTANDAO: Hatua 4 Saa ya Mtandao ya ESP8266 bila RTC yoyote - Saa ya Nodemcu NTP Hakuna RTC - MRADI WA BAHATI YA MTANDAO: Hatua 4](https://i.howwhatproduce.com/images/011/image-31107-j.webp)
Saa ya Mtandao ya ESP8266 bila RTC yoyote | Saa ya Nodemcu NTP Hakuna RTC | MRADI WA SAA YA MTANDAO
Je! Huo ni Mkono? (Kamera ya Raspberry Pi + Mtandao wa Neural) Sehemu ya 1/2: Hatua 16 (na Picha)
![Je! Huo ni Mkono? (Kamera ya Raspberry Pi + Mtandao wa Neural) Sehemu ya 1/2: Hatua 16 (na Picha) Je! Huo ni Mkono? (Kamera ya Raspberry Pi + Mtandao wa Neural) Sehemu ya 1/2: Hatua 16 (na Picha)](https://i.howwhatproduce.com/images/002/image-3672-109-j.webp)
Je! Huo ni Mkono? (Raspberry Pi Camera + Neural Network) Sehemu ya 1/2: Siku chache zilizopita, nilijeruhi mkono wangu wa kulia kwenye mazoezi. Baadaye kila wakati nilitumia panya yangu ya kompyuta, ilisababisha maumivu mengi kwa sababu ya pembeni ya mkono wa mkono. Hapo ndipo iliponigonga " isingekuwa nzuri ikiwa tunaweza kubadilisha uso wowote kuwa trackp