Агуулгын хүснэгт:
- Алхам 1: Хүрээлэн буй орчноо тохируулах
- Алхам 2: NASA хайлтын API -г хайж байна
- Алхам 3: Хувьсгалын мэдрэлийн сүлжээ
- Алхам 4: Зургийг боловсруулах
- Алхам 5: Дүрсийг тэгш өнцөгт проекц болгон оёх
- Алхам 6: Бүрэн Python скрипт
- Алхам 7: Электрон апп
- Алхам 8: Гүйцэтгэл
Видео: Python, Electron, Keras ашиглан мэдрэлийн сүлжээгээр ажилладаг планетариум: 8 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:01
Энэхүү зааварчилгаанд би Python, Electron ашиглан автомат 3D планетарийн генератор хэрхэн бичсэнээ харуулах болно
Дээрх видеон дээр санамсаргүй гаригуудын нэгийг үүсгэсэн програмыг харуулжээ.
** Тэмдэглэл: Энэ програм нь төгс төгөлдөр биш бөгөөд зарим газарт тийм ч питоник биш юм. Мэдрэлийн сүлжээний ялгаварлан гадуурхагч нь ердөө ~ 89% үнэн зөв байдаг тул зарим сондгой зургууд түүнийг гаригийн ертөнцөд оруулах болно **
Тодорхойлолт
Планетариум нь сансар огторгуйтай холбоотой зургуудыг авахын тулд NASA API-аас асууж, зургийг боловсруулахад тохиромжтой эсэхийг тодорхойлохын тулд мэдрэлийн мэдрэлийн сүлжээг ашигладаг. Дараа нь програм нь OpenCV -ийг ашиглан зургийн арын дэвсгэрийг арилгаж, эцэст нь зургийг нэг том тэгш өнцөгт дүрс болгон оёдог. Дараа нь энэ зургийг хадгалж, Electron Node.js програм нь зургийг нээж, PhotoSphere.js багцыг ашиглан зургийг planetarium загварын 3D форматаар үзэх боломжтой.
Хараат байдал
Python:
- Керас
- Дэр
- cv2
- Бүдүүн
- Хүсэлт
- urllib
- Санамсаргүй
- цаг
- io
Электрон:
PhotoSphere
Алхам 1: Хүрээлэн буй орчноо тохируулах
Электрон ба Python суулгах
Эхлээд node.js болон npm суулгасан эсэхээ шалгаарай (хэрэв байхгүй бол эндээс татаж авч болно)
Дараа нь та Electron -ийг суулгах хэрэгтэй. Тушаал хүлээх мөрийг нээгээд дараах тушаалыг оруулна уу.
npm электрон -g суулгана уу
Дараа нь танд эндээс татаж авах боломжтой питон хэрэгтэй болно
Виртуал орчныг тохируулах
Командын мөрийг нээгээд виртуал орчноо тохируулахын тулд дараах тушаалуудыг оруулна уу.
pip virtualenv суулгана уу
виртуал орон зай
cd зай
скрипт / идэвхжүүлэх
Python хамаарлыг суулгах
Python хамааралтай байдлаа суулгахын тулд эдгээр тушаалуудыг тушаалын мөрөнд ажиллуулна уу.
пипийг керас суулгах
pip дэр суулгах
pip суулгах numpy
pip суулгах хүсэлт
opencv-python-ийг суулгахХэрэв та сүлжээг өөрөө сургахыг хүсч байвал Keras -ийн GPU хурдатгалыг тохируулаарай
Алхам 2: NASA хайлтын API -г хайж байна
Тойм
НАСА -д төслүүддээ ашиглах боломжтой маш олон ашигтай API байдаг. Энэ төслийн хувьд бид NASA-ийн зургийн мэдээллийн сангаас сансарт хамааралтай зургийг хайх боломжийг олгодог хайлтын API-ийг ашиглах болно.
Код
Нэгдүгээрт, бид хайлтын нэр томъёо болох аргументыг хүлээн авахын тулд python функцийг тодорхойлох хэрэгтэй.
def get_image_search (хэллэг):
дамжуулах
Дараа нь бид хайлтын нэр томъёог URL формат руу хөрвүүлж, API -г асуухын тулд хүсэлтийн санг ашиглана.
def get_image_search (хэллэг):
params = {"q": urllib.parse.quote (arg), "media_type": "image"} results = requests.get ("https://images-api.nasa.gov/search", params = params)
Эцэст нь бид API бидэнд буцааж өгсөн цуглуулга+JSON мөрийг тайлж, хайлтын нэр томъёотой холбоотой зургуудын линкүүдийн жагсаалтыг гаргаж авах болно.
def get_image_search (хэллэг):
params = {"q": urllib.parse.quote (arg), "media_type": "image"} results = requests.get ("https://images-api.nasa.gov/search", params = params) data = [үр дүн ['href'] үр дүнгийн үр дүнг.json () ["цуглуулга"] ["зүйлс"]
Бид тийшээ явлаа! Бидэнд одоо NASA -ийн зураг хайх API -г асууж, хайлтын нэр томъёотой холбоотой зургуудын линкүүдийн жагсаалтыг буцааж өгөх кодын хэсэг байна.
Алхам 3: Хувьсгалын мэдрэлийн сүлжээ
Тойм
Мэдрэлийн сүлжээний үүрэг бол дүрс нь орон зайд ямар нэгэн зүйл байгаа эсэхийг ангилах явдал юм. Үүнийг хийхийн тулд бид мэдрэлийн мэдрэлийн сүлжээ буюу CNN-ийг ашиглан зураг дээрх матрицын хэд хэдэн үйлдлийг хийж, зай-y хэр байгааг тодорхойлох болно. Би энэ бүгдийг тайлбарлахгүй, учир нь үүний цаана маш олон онол байдаг, гэхдээ хэрэв та мэдрэлийн сүлжээний талаар мэдэхийг хүсч байвал "Машины сургалтын ур чадвар" -ыг санал болгож байна.
Код
Нэгдүгээрт, бид хамааралтай байдлаа импортлох хэрэгтэй.
импортлох os
GPU os.environ галт тэрэгний алхах үеийн асуудлыг засах #[CUDA_VISIBLE_DEVICES '] =' 'tf.test.gpu_device_name (): хэвлэх (' GPU олдсон ') өөр: хэвлэх ("GPU олдсонгүй") keras. np гэж numpy импортлох
Дараа нь бид загвараа тодорхойлох хэрэгтэй.
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_ (3), im_shape_ (3) = (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))) model.add (Идэвхжүүлэх ('relu')) загвар.add (MaxPooling2D (pool_size = (2, 2))) загвар.add (Conv2D (64, (2, 2))) model.add (Идэвхжүүлэх ('relu')) загвар.add (MaxPooling2D (pool_size = (2, 2))) загвар.add (Flatten ()) загвар. add (Нягт (64)) model.add (Идэвхжүүлэх ('relu')) загвар (алдагдал = 'binary_crossentropy', оновчлогч = 'rmsprop', хэмжигдэхүүн = ['нарийвчлал'])
Би танд зориулж загварыг зааж өгсөн, гэхдээ хэрэв та загвараа өөрөө, өөрийн мэдээллийн санд сургахыг хүсч байвал сургалтын кодыг хавсаргасан болно. Үгүй бол та бэлтгэгдсэн загварын HDF5 файлыг татаж авах боломжтой. Instructables файлын хязгаарлалтын улмаас би үүнийг ".txt" өргөтгөлөөр нэрлэх шаардлагатай болсон. Үүнийг ашиглахын тулд файлыг ".h5" өргөтгөл болгон өөрчилж, энэ кодоор ачаална уу.
model.load_weights ("model_saved.h5")
Зураг хэр зайтай болохыг урьдчилан таамаглахын тулд сүлжээг ашиглахын тулд бид энэ функцийг тодорхойлно.
def таамаглах (image_path):
img = image.load_img (image_path, target_size = (1000, 500)) img = np.expand_dims (img, тэнхлэг = 0) үр дүн = model.predict_classes (img) буцах үр дүн [0] [0]
Алхам 4: Зургийг боловсруулах
Тойм
Зураг боловсруулахад би OpenCV (cv2) номын санг ашиглаж байна. Нэгдүгээрт, бид зургийн ирмэгийг бүдгэрүүлж, дараа нь маск хийж, бараан өнгөний альфа утгыг өөрчлөх замаар арын дэвсгэрийг арилгах болно.
Код
Энэ бол ирмэгийг бүдгэрүүлэх функцийн хэсэг юм.
def processImage (img):
RADIUS = 20 # Зураг нээх im = Image.open ("pilbuffer.png") # Зургийг цагаан дэвсгэр дээр буулгах diam = 2 * RADIUS back = Image.new ('RGB', (im.size [0] + diam, im.size [1] + diam), (0, 0, 0)) back.paste (im, (RADIUS, RADIUS)) # # Бүдгэрүүлэх маск үүсгэх = 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) маск. оо (blck, (diam, diam)) # Зургийг бүдгэрүүлж, маскны дагуу бүдгэрсэн ирмэгийг буулгах = буцах. шүүлтүүр (ImageFilter. GaussianBlur (RADIUS / 2)) буцах. switch-p.webp
Дараа нь бид бараан өнгийг ил тод болгож, зургийг түр хадгалах болно.
#Маск, шүүлтүүр үүсгээд харыг альфаар солино
image = cv2.imread ("switch.png") hMin = 0 sMin = 0 vMin = 20 hMax = 180 sMax = 255 vMax = 255 доод = np.array ([hMin, sMin, vMin]) дээд = np.array ([hMax, sMax, vMax]) hsv = cv2.cvtColor (зураг, cv2. COLOR_BGR2HSV) маск = cv2.inRange (hsv, доод, дээд) гаралт = cv2.bitwise_and (зураг, дүрс, маск = маск) *_, альфа = cv2.split (output) dst = cv2.merge ((output, alpha)) output = dst with open ("buffer.png", "w+") in file: pass cv2.imwrite ("buffer.png", output))
Алхам 5: Дүрсийг тэгш өнцөгт проекц болгон оёх
Тойм
Энэ функц нь олон зураг авч, тэдгээрийг PIL (дэр) номын санг ашиглан PhotoSphere.js багцаар тайлбарлаж болох формат болгон оёдог.
Код
Нэгдүгээрт, бид бусад зургуудын хост болж чадах дүрсийг бүтээх хэрэгтэй.
new = Image.new ("RGBA", (8000, 4000), өнгө = (0, 0, 0))
Дараа нь бид зургийн массивыг давтаж (бүгдийг нь 1000x500 болгон өөрчилсөн) зурган дээр байрлуулах хэрэгтэй.
h = 0
w = 0 i = 0 img_arr: new.paste (img, (w, h), img) w += 1000 бол w == 8000: h += 500 w = 0 i += 1
Одоо бид үүнийг олон тооны зургуудыг аргумент болгон авч, шинэ дүрсийг буцааж өгөх функцээр ороосон болно.
def stitch_beta (img_arr):
new = Image.new ("RGBA", (8000, 4000), color = (0, 0, 0)) h = 0 w = 0 i = 0 in img_arr: new.paste (img, (w, h), img) w += 1000 бол w == 8000: h += 500 w = 0 i += 1 шинэ буцах
Алхам 6: Бүрэн Python скрипт
Энэ бол net.py хэлбэрээр хадгалагдаж, үндсэн скриптэд импортлогдсон бүрэн python мэдрэлийн сүлжээний скрипт юм.
# номын сан импортлох
GPU os.environ -ийн галт тэрэгний алхамын үед гарах асуудлыг импортлох #засварлах ['CUDA_VISIBLE_DEVICES'] = '' tf.test.gpu_device_name (): хэвлэх ('GPU олдсон') өөр: хэвлэх ("GPU олдсонгүй ") keras.preprocessing.image -аас импортлох ImageDataGenerator keras -аас импортлох зураг keras.models импортлох keras.layers -ээс дараалсан импорт Conv2D, keras.layers -аас MaxPooling2D импортлох, идэвхжүүлэх, хаях, хавтгайруулах импорт Зургийн импорт_pg_thid = 1000, 500 train_data_dir = 'v_data/train' validation_data_dir = 'v_data/test': input_shape = (3, img_width, img_height) өөр: input_shape = (img_width, img_height, 3) model = Sequential () model.add (Conv2D (32, (2, 2), input_shape = input_shape)) model.add (Идэвхжүүлэх ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Conv2D (32, (2, 2))) загвар. add (Activation ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Conv2D (64, (2, 2))) model.add (Идэвхжүүлэх ('relu')) model.add (MaxPooling2D (pool_size = (2, 2))) model.add (Flatten ()) model.add (Dense (64)) model.add (Activation ('relu')) model.add (Dropout (0.5))) model.add (Нягт (1)) model.add (Идэвхжүүлэх ('sigmoid')) загвар. эмхэтгэх (loss = 'binary_crossentropy', optimizer = 'rmsprop', хэмжүүрүүд = ['нарийвчлал']) model.load_weights ("model_saved.h5") def урьдчилсан таамаглал (image_path): img = image.load_img (image_path, target_size = (1000, 500)) img = np.expand_dims (img, тэнхлэг = 0) үр дүн = model.predict_classes (img) буцах үр дүн [0] [0]
Энэ бол api.py гэсэн үндсэн python файл юм:
импортын хүсэлт, sys, санамсаргүй, urllib.parse, cv2
PIL импортоос Зураг, io импортоос авсан ImageFilter BytesIO импортыг np импортоор цэвэр def get_image_search (тоо, хэллэг): count = 0 img_arr = arg in өгүүлбэр: print (arg) print (f "Одоогийн зургийн тоо: {count) } ") i = 0 params = {" q ": urllib.parse.quote (arg)," media_type ":" image "} үр дүн = request.get (" https://images-api.nasa.gov/search ", params = params) өгөгдөл = [үр дүн ['href'] үр дүнгийн үр дүнгийн хувьд.json () [" цуглуулга "] [" зүйлс "] хэвлэх (len (өгөгдөл)) хэрэв num> len (мэдээлэл): num = len (өгөгдөл) тоолох үед
Алхам 7: Электрон апп
Тойм
Бид PhotoSphere элементийг байрлуулж, ачаалах энгийн электрон програмыг бүтээх болно. Main.js болон package.json файлууд нь Electron вэбсайтаас шууд гардаг бөгөөд HTML нь PhotoSphere вэбсайт дээр байрлуулсан HTML -ийн бага зэрэг өөрчлөгдсөн хувилбар юм. Би файлуудыг оруулсан боловч Instructables нь эдгээр файлын төрлийг зөвшөөрдөггүй тул бүгдийг нь.txt болгон өөрчилсөн. Файлуудыг ашиглахын тулд тэдгээрийг зохих өргөтгөлөөр нэрлэнэ үү.
Код
үндсэн.js
const {апп, BrowserWindow} = шаардах ('электрон')
createWindow () {const win = new BrowserWindow ({өргөн: 800, өндөр: 600, webPreferences: {nodeIntegration: true}}) win.loadFile ('index.html')} app.whenReady () функц, дараа нь (createWindow) app.on ('цонх-бүх хаалттай', () => {if (process.platform! == 'darwin') {app.quit ()}}) app.on ('идэвхжүүлэх', () => {if (BrowserWindow.getAllWindows (). length === 0) {createWindow ()}})
багц.json
{
"name": "space", "version": "0.1.0", "main": "main.js", "scripts": {"start": "electron." }}
индекс.html
Алхам 8: Гүйцэтгэл
Тэгш өнцөгт дүрсийг бүтээх
Зургийг үүсгэхийн тулд api.py скриптийг командын мөрөнд ажиллуулж виртуал орчноо идэвхжүүлнэ үү.
api.py
Скриптүүд ажиллаж дууссаны дараа электрон програмыг ажиллуулна уу:
npm эхлэхВоила! Таны планетарий идэвхтэй байна! Уншсанд баярлалаа:)
Зөвлөмж болгож буй:
Утасгүй сүлжээгээр ажилладаг бүх компьютерийг LAN дээр сэрээх: 3 алхам
Утасгүй сүлжээгээр ажилладаг аливаа компьютерийг LAN дээр сэрээх: Raspbpian дүрс өөрчлөгдсөний улмаас энэ заавар шинэчлэгдэхээ больсон. Шинэчлэгдсэн гарын авлагыг эндээс үзнэ үү: https://www.instructables.com/id/Raspberry-Pi-As-Wake-on-LAN-ServerWOL нь бараг бүх Ethernet порт дээр байдаг. Энэ биш
Raspberry Pi ашиглан сүлжээгээр зар сурталчилгаа хаах: 4 алхам
Raspberry Pi-ээр сүлжээгээр зар сурталчилгаа хаах: Илүү цэвэр, илүү хурдан вэбийг мэдэрч, Pi-hole болон Raspberry Pi ашиглан гэрийнхээ бүх сүлжээнд ядаргаатай зар сурталчилгааг хаах
ESP32 CAM -ийг ашиглаж эхлэх нь Wifi сүлжээгээр ESP CAM ашиглан видео дамжуулах - ESP32 аюулгүй байдлын камерын төсөл: 8 алхам
ESP32 CAM -ийг ашиглаж эхлэх нь Wifi сүлжээгээр ESP CAM ашиглан видео дамжуулах | ESP32 Аюулгүй байдлын камерын төсөл: Өнөөдөр бид энэхүү шинэ ESP32 CAM хавтанг хэрхэн ашиглах, үүнийг хэрхэн кодлох, хамгаалалтын камер болгон ашиглах, wifi -ээр дамжуулж буй видеог авах талаар сурах болно
Энэ гар уу? (Raspberry Pi камер + мэдрэлийн сүлжээ) 1/2 хэсэг: 16 алхам (зурагтай)
Энэ гар уу? (Raspberry Pi Camera + Neural Network) 1/2 хэсэг: Хэдхэн хоногийн өмнө би биеийн тамирын зааланд баруун гарын бугуйгаа гэмтээсэн. Дараа нь би компьютерийн хулганыг ашиглах бүртээ бугуйны өнцөг огцом өвдсөнөөс болж маш их өвддөг. Тэр үед энэ нь намайг цохисон юм. "Хэрэв бид ямар ч гадаргууг трек болгон хувиргаж чадвал сайхан байх болно
Тархины хайрцаг: Цаг хугацааны явцад мэдрэлийн хэмжээг хянах: 20 алхам
Тархины хайрцаг: Цаг хугацааны явцад мэдрэлийн эзэлхүүнийг хянах: Хүний урт наслах хил рүү ахиц дэвшил нь бидний өмнө соёл иргэншлүүдэд үзэгдээгүй өвчнүүд гарч ирэв. Эдгээрийн дунд Альцгеймер 2017 онд ойролцоогоор 5.3 сая өндөр настай америкчуудад өртсөн буюу ойролцоогоор 10 жилийн 1 -т