Halo, saya siswa kelas 11, saya tertarik pada pemrograman, tentang topik-topik IT.
Saya menulis posting ini untuk membagikan proyek saya, yang memakan waktu 10 jam dari hidup saya di akhir pekan dan diselesaikan untuk memahami kemungkinan metode modern dalam analisis data. Publikasi dapat dianggap sebagai contoh implementasi yang berhasil bagi orang-orang yang tidak tahu apa-apa dalam bidang pengetahuan ini, serta permintaan untuk menunjukkan kesalahan saya bagi orang-orang yang berpengetahuan luas.
Diberikan: aliran video dari kamera pengintai, di mana terdapat fragmen 100x50 piksel dengan gambar ruang parkir tertentu, yang hanya ada atau tidak ada mobil tertentu.
Tujuan: untuk mengetahui ada tidaknya mobil di tempat parkir.
Menerima gambar kamera
Saya menggunakan perpustakaan openCV untuk mendapatkan dan memproses gambar.
Kode berikut ini saya gunakan untuk membangun dataset yang saya gunakan untuk melatih jaringan saraf: Saya memotret tempat parkir setiap jam, dan setelah menerima 60 foto, saya membaginya secara manual menjadi foto dengan dan tanpa mesin.
dataminer.pyimport cv2 as cv import numpy as np import time cap = cv.VideoCapture() r = 0 while r <=100: cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main')
Pemrosesan gambar
Saya pikir itu adalah keputusan yang tepat untuk melatih jaringan saraf bukan pada gambar sumber, tetapi pada gambar dengan kontur mobil yang ditemukan menggunakan fungsi cv2.findcontours (...).
Berikut adalah kode yang mengubah gambar asli menjadi gambar garis besar:
Menemukan kontur def contoursfinder(image): img = image.copy() srcimg = img.copy() hsv_min = np.array((0, 0, 0), np.uint8) hsv_max = np.array((255, 255, 60), np.uint8)
Hasil dari fungsi:
Jaringan saraf
Saya menggunakan perpustakaan tensorflow (keras).
Arsitektur jaringan telah disalin dari contoh dari Internet: bagi saya, penjelasan tidak jelas mengapa demikian. Jika orang yang berpengetahuan tahu atau mengatakan di mana harus membaca, mengapa arsitektur ini efektif atau mengapa yang lain lebih efektif, saya akan sangat berterima kasih.
Model jaringan saraf: sekuensial, terdiri dari dua lapisan tersembunyi yang tebal dari 256 dan 128 neuron dan input, lapisan keluaran.
Kode model = keras.Sequential([ keras.layers.Flatten(input_shape=(100, 50)), keras.layers.Dense(256, activation=tf.nn.relu), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(2, activation=tf.nn.softmax) ]) model.compile(optimizer=tf.train.AdamOptimizer(), loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(trainingimagesarr, trainingimagesarrlabel, epochs=1, callbacks=[tbCallBack])
Sebelum pelatihan, seluruh matriks numpy dibagi oleh 255 untuk memberikan angka dalam kisaran dari 0 hingga 1 hingga input dari jaringan saraf.
trainingimagesarr = trainingimagesarr / 255.0 trainingimagesarrlabel = np.array(trainingimagesarrlabel)-1
Sekarang saya bisa memanggil fungsi:
def realtest(): cap = cv.VideoCapture() cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main') hasFrame, frame = cap.read() frame = frame[100:200, 300:750] quantframe = frame[0:100,275:325] quantframe = contoursfinder(quantframe) return model.predict(np.array([quantframe]))[0][1]>0.60
dapatkan data keberadaan mobil di tempat parkir.
Jangan banyak nendang, tapi sedikit :-)
Terima kasih