Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Mengapa Anda ingin tahu lebih banyak tentang berbagai cara menyimpan dan mengakses gambar dengan Python? . Bahkan jika Anda menggunakan Python Imaging Library (PIL) untuk menggambar beberapa ratus foto, Anda tetap tidak perlu melakukannya. Menyimpan gambar pada disk, sebagai file

$ pip install lmdb
_0 atau
$ pip install lmdb
1, cocok dan sesuai

Namun, semakin banyak, jumlah gambar yang diperlukan untuk tugas tertentu semakin besar. Algoritme seperti jaringan saraf convolutional, juga dikenal sebagai convnets atau CNN, dapat menangani kumpulan data gambar yang sangat besar dan bahkan belajar darinya. Jika Anda tertarik, Anda dapat membaca lebih lanjut tentang bagaimana convnets dapat digunakan untuk memeringkat selfie atau untuk analisis sentimen

ImageNet adalah database gambar publik terkenal yang disatukan untuk model pelatihan pada tugas-tugas seperti klasifikasi objek, deteksi, dan segmentasi, dan terdiri dari lebih dari 14 juta gambar

Pikirkan tentang berapa lama waktu yang dibutuhkan untuk memuat semuanya ke dalam memori untuk pelatihan, dalam batch, mungkin ratusan atau ribuan kali. Teruslah membaca, dan Anda akan yakin bahwa ini akan memakan waktu cukup lama—setidaknya cukup lama untuk meninggalkan komputer Anda dan melakukan banyak hal lain sementara Anda ingin bekerja di Google atau NVIDIA

Dalam tutorial ini, Anda akan belajar tentang

  • Menyimpan gambar pada disk sebagai
    $ pip install lmdb
    
    0 file
  • Menyimpan gambar dalam database yang dipetakan dengan memori kilat (LMDB)
  • Menyimpan gambar dalam format data hierarkis (HDF5)

Anda juga akan menjelajahi yang berikut ini

  • Mengapa metode penyimpanan alternatif patut dipertimbangkan
  • Apa perbedaan performa saat Anda membaca dan menulis gambar tunggal
  • Apa perbedaan kinerja saat Anda membaca dan menulis banyak gambar
  • Bagaimana ketiga metode tersebut dibandingkan dalam hal penggunaan disk

Jika tidak ada metode penyimpanan yang menarik, jangan khawatir. untuk artikel ini, yang Anda butuhkan hanyalah fondasi yang cukup kuat dalam Python dan pemahaman dasar tentang gambar (bahwa gambar tersebut benar-benar terdiri dari susunan angka multidimensi) dan memori relatif, seperti perbedaan antara 10MB dan 10GB

Mari kita mulai

Bonus Gratis. Klik di sini untuk mendapatkan Panduan Mini Deteksi Wajah Python & Contoh OpenCV yang menunjukkan kepada Anda contoh kode praktis dari teknik visi komputer Python dunia nyata

Mempersiapkan

Anda memerlukan kumpulan data gambar untuk bereksperimen, serta beberapa paket Python

Hilangkan iklan

Kumpulan Data untuk Dimainkan

Kami akan menggunakan dataset gambar Canadian Institute for Advanced Research, lebih dikenal sebagai CIFAR-10, yang terdiri dari 60.000 gambar berwarna berukuran 32x32 piksel milik kelas objek yang berbeda, seperti anjing, kucing, dan pesawat terbang. Relatif, CIFAR bukanlah kumpulan data yang sangat besar, tetapi jika kami menggunakan kumpulan data TinyImages lengkap, Anda memerlukan sekitar 400GB ruang disk kosong, yang mungkin akan menjadi faktor pembatas

Kredit untuk kumpulan data seperti yang dijelaskan dalam bab 3 laporan teknologi ini diberikan kepada Alex Krizhevsky, Vinod Nair, dan Geoffrey Hinton

Jika Anda ingin mengikuti contoh kode dalam artikel ini, Anda dapat mengunduh CIFAR-10 di sini, memilih versi Python. Anda akan mengorbankan 163MB ruang disk

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?
Gambar. SEBUAH. Krizhevsky

Saat Anda mengunduh dan mengekstrak folder, Anda akan menemukan bahwa file tersebut bukan file gambar yang dapat dibaca manusia. Mereka sebenarnya telah diserialisasi dan disimpan dalam batch menggunakan cPickle

Meskipun kami tidak akan mempertimbangkan

$ pip install lmdb
_3 atau
$ pip install lmdb
4 dalam artikel ini, selain untuk mengekstrak dataset CIFAR, perlu disebutkan bahwa modul Python
$ pip install lmdb
3 memiliki keuntungan utama karena dapat membuat serial objek Python apa pun tanpa kode tambahan atau transformasi di pihak Anda. Ini juga memiliki potensi kerugian yang serius karena menimbulkan risiko keamanan dan tidak dapat mengatasi dengan baik saat menangani data dalam jumlah yang sangat besar

Kode berikut membuka masing-masing dari lima file batch dan memuat semua gambar ke dalam array NumPy

import numpy as np
import pickle
from pathlib import Path

# Path to the unzipped CIFAR data
data_dir = Path("data/cifar-10-batches-py/")

# Unpickle function provided by the CIFAR hosts
def unpickle(file):
    with open(file, "rb") as fo:
        dict = pickle.load(fo, encoding="bytes")
    return dict

images, labels = [], []
for batch in data_dir.glob("data_batch_*"):
    batch_data = unpickle(batch)
    for i, flat_im in enumerate(batch_data[b"data"]):
        im_channels = []
        # Each image is flattened, with channels in order of R, G, B
        for j in range(3):
            im_channels.append(
                flat_im[j * 1024 : (j + 1) * 1024].reshape((32, 32))
            )
        # Reconstruct the original image
        images.append(np.dstack((im_channels)))
        # Save the label
        labels.append(batch_data[b"labels"][i])

print("Loaded CIFAR-10 training set:")
print(f" - np.shape(images)     {np.shape(images)}")
print(f" - np.shape(labels)     {np.shape(labels)}")
_

Semua gambar sekarang ada di RAM dalam variabel

$ pip install lmdb
6, dengan meta data yang sesuai di
$ pip install lmdb
7, dan siap untuk Anda manipulasi. Selanjutnya, Anda dapat menginstal paket Python yang akan Anda gunakan untuk ketiga metode tersebut

Catatan. Blok kode terakhir itu menggunakan f-string. Anda dapat membaca lebih lanjut tentang mereka di f-Strings Python 3. Sintaks Pemformatan String yang Disempurnakan (Panduan)

Pengaturan untuk Menyimpan Gambar di Disk

Anda harus menyiapkan lingkungan Anda untuk metode penyimpanan default dan mengakses gambar ini dari disk. Artikel ini menganggap Anda memiliki Python 3. x diinstal pada sistem Anda, dan akan menggunakan

$ pip install lmdb
8 untuk manipulasi gambar

$ pip install Pillow

Atau, jika mau, Anda dapat menginstalnya menggunakan Anaconda

$ conda install -c conda-forge pillow

Catatan.

$ pip install lmdb
9 adalah versi asli dari Perpustakaan Pencitraan Python, yang tidak lagi dipertahankan dan tidak kompatibel dengan Python 3. x. Jika sebelumnya Anda telah menginstal
$ pip install lmdb
_9, pastikan untuk menghapus instalannya sebelum menginstal
$ pip install lmdb
8, karena keduanya tidak dapat ada bersamaan

Sekarang Anda siap untuk menyimpan dan membaca gambar dari disk

Memulai Dengan LMDB

LMDB, terkadang disebut sebagai "Basis Data Petir", adalah singkatan dari Basis Data Pemetaan Memori Petir karena cepat dan menggunakan file yang dipetakan memori. Ini adalah penyimpanan nilai kunci, bukan database relasional

Dalam hal implementasi, LMDB adalah pohon B+, yang pada dasarnya berarti bahwa ini adalah struktur grafik seperti pohon yang disimpan dalam memori di mana setiap elemen nilai kunci adalah simpul, dan simpul dapat memiliki banyak anak. Node pada level yang sama dihubungkan satu sama lain untuk traversal cepat

Secara kritis, komponen kunci pohon B+ diatur agar sesuai dengan ukuran halaman sistem operasi host, memaksimalkan efisiensi saat mengakses pasangan kunci-nilai apa pun di database. Karena kinerja tinggi LMDB sangat bergantung pada poin khusus ini, efisiensi LMDB telah terbukti bergantung pada sistem file yang mendasarinya dan implementasinya.

Alasan utama lain untuk efisiensi LMDB adalah karena dipetakan memori. Ini berarti mengembalikan pointer langsung ke alamat memori dari kunci dan nilai, tanpa perlu menyalin apa pun di memori seperti kebanyakan database lain.

Mereka yang ingin mempelajari lebih dalam tentang detail implementasi internal pohon B+ dapat melihat artikel ini tentang pohon B+ dan kemudian bermain dengan visualisasi penyisipan simpul ini

Jika pohon B+ tidak menarik bagi Anda, jangan khawatir. Anda tidak perlu tahu banyak tentang penerapan internalnya untuk menggunakan LMDB. Kami akan menggunakan pengikatan Python untuk pustaka LMDB C, yang dapat diinstal melalui pip

$ pip install lmdb

Anda juga memiliki opsi untuk menginstal melalui Anaconda

$ conda install -c conda-forge python-lmdb

Pastikan Anda dapat

$ conda install -c conda-forge python-lmdb
_2 dari shell Python, dan Anda siap melakukannya

Hilangkan iklan

Memulai Dengan HDF5

HDF5 adalah singkatan dari Hierarchical Data Format, format file yang disebut sebagai HDF4 atau HDF5. Kami tidak perlu khawatir tentang HDF4, karena HDF5 adalah versi yang dipertahankan saat ini

Menariknya, HDF berasal dari National Center for Supercomputing Applications, sebagai format data ilmiah yang ringkas dan portabel. Jika Anda bertanya-tanya apakah itu digunakan secara luas, lihat uraian NASA di HDF5 dari proyek Data Bumi mereka

File HDF terdiri dari dua jenis objek

  1. Dataset
  2. Grup

Kumpulan data adalah array multidimensi, dan grup terdiri dari kumpulan data atau grup lain. Array multidimensi dengan berbagai ukuran dan jenis dapat disimpan sebagai kumpulan data, tetapi dimensi dan jenisnya harus seragam di dalam kumpulan data. Setiap dataset harus berisi larik N-dimensi yang homogen. Meskipun demikian, karena grup dan kumpulan data mungkin bersarang, Anda masih bisa mendapatkan heterogenitas yang mungkin Anda perlukan

$ pip install h5py

Seperti perpustakaan lainnya, Anda dapat menginstal secara bergantian melalui Anaconda

$ conda install -c conda-forge h5py

Jika Anda dapat

$ conda install -c conda-forge python-lmdb
_3 dari shell Python, semuanya sudah diatur dengan benar

Menyimpan Gambar Tunggal

Sekarang setelah Anda memiliki gambaran umum tentang metode, mari selami dan lihat perbandingan kuantitatif dari tugas-tugas dasar yang kita pedulikan. berapa lama untuk membaca dan menulis file, dan berapa banyak memori disk yang akan digunakan. Ini juga akan berfungsi sebagai pengantar dasar tentang cara kerja metode, dengan contoh kode tentang cara menggunakannya

Ketika saya merujuk ke "file", yang saya maksud biasanya banyak dari mereka. Namun, penting untuk membuat perbedaan karena beberapa metode dapat dioptimalkan untuk operasi dan jumlah file yang berbeda

Untuk tujuan eksperimen, kami dapat membandingkan performa antara berbagai jumlah file, dengan faktor 10 dari satu gambar hingga 100.000 gambar. Karena lima batch CIFAR-10 kami berjumlah hingga 50.000 gambar, kami dapat menggunakan setiap gambar dua kali untuk mendapatkan 100.000 gambar

Untuk mempersiapkan percobaan, Anda ingin membuat folder untuk setiap metode, yang akan berisi semua file database atau gambar, dan menyimpan jalur ke direktori tersebut dalam variabel

from pathlib import Path

disk_dir = Path("data/disk/")
lmdb_dir = Path("data/lmdb/")
hdf5_dir = Path("data/hdf5/")

$ conda install -c conda-forge python-lmdb
_4 tidak secara otomatis membuat folder untuk Anda kecuali Anda secara khusus memintanya

disk_dir.mkdir(parents=True, exist_ok=True)
lmdb_dir.mkdir(parents=True, exist_ok=True)
hdf5_dir.mkdir(parents=True, exist_ok=True)

Sekarang Anda dapat melanjutkan untuk menjalankan eksperimen sebenarnya, dengan contoh kode tentang cara melakukan tugas dasar dengan tiga metode berbeda. Kita dapat menggunakan modul

$ conda install -c conda-forge python-lmdb
_5, yang disertakan dalam pustaka standar Python, untuk membantu mengatur waktu percobaan

Meskipun tujuan utama dari artikel ini bukan untuk mempelajari API dari berbagai paket Python, akan sangat membantu untuk memiliki pemahaman tentang bagaimana mereka dapat diimplementasikan. Kami akan membahas prinsip-prinsip umum bersama semua kode yang digunakan untuk melakukan eksperimen penyimpanan

Hilangkan iklan

Menyimpan ke Disk

Masukan kami untuk percobaan ini adalah satu gambar

$ conda install -c conda-forge python-lmdb
6, saat ini dalam memori sebagai larik NumPy. Anda ingin menyimpannya terlebih dahulu ke disk sebagai gambar
$ pip install lmdb
0, dan menamainya menggunakan ID gambar unik
$ conda install -c conda-forge python-lmdb
8. Ini dapat dilakukan dengan menggunakan paket
$ pip install lmdb
_8 yang Anda instal sebelumnya

from PIL import Image
import csv

def store_single_disk(image, image_id, label):
    """ Stores a single image as a .png file on disk.
        Parameters:
        ---------------
        image       image array, (32, 32, 3) to be stored
        image_id    integer unique ID for image
        label       image label
    """
    Image.fromarray(image).save(disk_dir / f"{image_id}.png")

    with open(disk_dir / f"{image_id}.csv", "wt") as csvfile:
        writer = csv.writer(
            csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL
        )
        writer.writerow([label])

Ini menyimpan gambar. Dalam semua aplikasi realistik, Anda juga memperhatikan meta data yang dilampirkan pada gambar, yang dalam kumpulan data contoh kami adalah label gambar. Saat Anda menyimpan gambar ke disk, ada beberapa opsi untuk menyimpan data meta

Salah satu solusinya adalah menyandikan label ke dalam nama gambar. Ini memiliki keuntungan karena tidak memerlukan file tambahan

Namun, ini juga memiliki kerugian besar karena memaksa Anda menangani semua file setiap kali Anda melakukan sesuatu dengan label. Menyimpan label dalam file terpisah memungkinkan Anda bermain-main dengan label saja, tanpa harus memuat gambar. Di atas, saya telah menyimpan label dalam file

$ pip install h5py
0 terpisah untuk percobaan ini

Sekarang mari beralih ke melakukan tugas yang persis sama dengan LMDB

Menyimpan ke LMDB

Pertama, LMDB adalah sistem penyimpanan nilai kunci di mana setiap entri disimpan sebagai array byte, jadi dalam kasus kami, kunci akan menjadi pengidentifikasi unik untuk setiap gambar, dan nilainya adalah gambar itu sendiri. Baik kunci dan nilai diharapkan berupa string, jadi penggunaan umumnya adalah membuat serialisasi nilai sebagai string, lalu membatalkan serialisasi saat membacanya kembali.

Anda dapat menggunakan

$ pip install lmdb
_3 untuk serialisasi. Objek Python apa pun dapat diserialisasi, jadi Anda juga dapat menyertakan data meta gambar dalam database. Ini menyelamatkan Anda dari masalah melampirkan data meta kembali ke data gambar saat kami memuat kumpulan data dari disk

Anda dapat membuat kelas Python dasar untuk gambar dan data metanya

$ pip install Pillow
_0

Kedua, karena LMDB dipetakan memori, basis data baru perlu mengetahui berapa banyak memori yang diperkirakan akan digunakan. Ini relatif mudah dalam kasus kami, tetapi bisa sangat menyakitkan dalam kasus lain, yang akan Anda lihat lebih dalam di bagian selanjutnya. LMDB menyebut variabel ini

$ pip install h5py
2

Terakhir, operasi baca dan tulis dengan LMDB dilakukan di

$ pip install h5py
3. Anda dapat menganggapnya mirip dengan basis data tradisional, yang terdiri dari sekelompok operasi pada basis data. Ini mungkin terlihat jauh lebih rumit daripada versi disk, tetapi tunggu dan teruslah membaca

Dengan mengingat ketiga poin tersebut, mari kita lihat kode untuk menyimpan satu gambar ke LMDB

$ pip install Pillow
_1

Catatan. Sebaiknya hitung jumlah persis byte yang akan digunakan oleh setiap pasangan nilai kunci

Dengan kumpulan data gambar dengan berbagai ukuran, ini akan menjadi perkiraan, tetapi Anda dapat menggunakan

$ pip install h5py
4 untuk mendapatkan perkiraan yang masuk akal. Ingatlah bahwa
$ pip install h5py
_5 hanya akan mengembalikan ukuran definisi kelas, yaitu 1056, bukan ukuran objek yang dipakai

Fungsi juga tidak akan dapat sepenuhnya menghitung item bersarang, daftar, atau objek yang berisi referensi ke objek lain

Bergantian, Anda dapat menggunakan untuk menghemat beberapa perhitungan dengan menentukan ukuran yang tepat dari suatu objek

Anda sekarang siap untuk menyimpan gambar ke LMDB. Terakhir, mari kita lihat metode terakhir, HDF5

Menyimpan Dengan HDF5

Ingatlah bahwa file HDF5 dapat berisi lebih dari satu kumpulan data. Dalam kasus yang agak sepele ini, Anda dapat membuat dua set data, satu untuk gambar, dan satu lagi untuk meta datanya

$ pip install Pillow
_2

$ pip install h5py
7 menentukan jenis data yang akan disimpan dalam kumpulan data, yang dalam hal ini adalah bilangan bulat 8-bit yang tidak ditandatangani. Anda dapat melihat daftar lengkap tipe data standar HDF di sini

Catatan. Pilihan tipe data akan sangat mempengaruhi persyaratan runtime dan penyimpanan HDF5, jadi sebaiknya pilih persyaratan minimum Anda

Sekarang kami telah meninjau tiga metode untuk menyimpan satu gambar, mari beralih ke langkah berikutnya

Hilangkan iklan

Eksperimen untuk Menyimpan Gambar Tunggal

Sekarang Anda dapat memasukkan ketiga fungsi untuk menyimpan satu gambar ke dalam kamus, yang dapat dipanggil nanti selama percobaan waktu

$ pip install Pillow
_3

Akhirnya, semuanya siap untuk melakukan percobaan berjangka waktu. Mari kita coba menyimpan gambar pertama dari CIFAR dan label yang sesuai, dan menyimpannya dengan tiga cara berbeda

$ pip install Pillow
_4

Catatan. Saat bermain-main dengan LMDB, Anda mungkin melihat kesalahan

$ pip install h5py
8. Penting untuk diperhatikan bahwa LMDB tidak menimpa nilai yang sudah ada sebelumnya, meskipun memiliki kunci yang sama

Ini berkontribusi pada waktu penulisan yang cepat, tetapi ini juga berarti bahwa jika Anda menyimpan gambar lebih dari sekali dalam file LMDB yang sama, Anda akan menghabiskan ukuran peta. Jika Anda menjalankan fungsi penyimpanan, pastikan untuk menghapus file LMDB yang sudah ada terlebih dahulu

Ingatlah bahwa kita tertarik pada runtime, yang ditampilkan di sini dalam hitungan detik, dan juga penggunaan memori

MetodeSimpan Gambar Tunggal + MetaMemoryDisk1. 915 ms8 KLMDB1. 203 ms32 KHDF58. 243 ms8 K

Ada dua takeaways di sini

  1. Semua metode ini sangat cepat
  2. Dalam hal penggunaan disk, LMDB menggunakan lebih banyak

Jelas, meskipun LMDB memiliki sedikit keunggulan kinerja, kami belum meyakinkan siapa pun mengapa tidak hanya menyimpan gambar di disk. Lagi pula, ini adalah format yang dapat dibaca manusia, dan Anda dapat membuka dan melihatnya dari browser sistem file apa pun. Nah, saatnya untuk melihat lebih banyak gambar…

Menyimpan Banyak Gambar

Anda telah melihat kode untuk menggunakan berbagai metode penyimpanan untuk menyimpan satu gambar, jadi sekarang kita perlu menyesuaikan kode untuk menyimpan banyak gambar dan kemudian menjalankan eksperimen berjangka waktu

Menyesuaikan Kode untuk Banyak Gambar

Menyimpan banyak gambar sebagai

$ pip install lmdb
_0 file semudah memanggil
$ conda install -c conda-forge h5py
0 beberapa kali. Tetapi ini tidak berlaku untuk LMDB atau HDF5, karena Anda tidak menginginkan file database yang berbeda untuk setiap gambar. Sebaliknya, Anda ingin memasukkan semua gambar ke dalam satu atau beberapa file

Anda perlu sedikit mengubah kode dan membuat tiga fungsi baru yang menerima banyak gambar,

$ conda install -c conda-forge h5py
1,
$ conda install -c conda-forge h5py
2, dan
$ conda install -c conda-forge h5py
3

$ pip install Pillow
_5

Agar Anda dapat menyimpan lebih dari satu file ke disk, metode file gambar diubah untuk mengulang setiap gambar dalam daftar. Untuk LMDB, loop juga diperlukan karena kami membuat objek

$ conda install -c conda-forge h5py
4 untuk setiap gambar dan meta datanya

Penyesuaian terkecil adalah dengan metode HDF5. Bahkan, hampir tidak ada penyesuaian sama sekali. File HFD5 tidak memiliki batasan ukuran file selain dari batasan eksternal atau ukuran dataset, jadi semua gambar dimasukkan ke dalam satu dataset, seperti sebelumnya

Selanjutnya, Anda perlu menyiapkan kumpulan data untuk eksperimen dengan memperbesar ukurannya

Hilangkan iklan

Mempersiapkan Dataset

Sebelum menjalankan eksperimen lagi, pertama-tama mari gandakan ukuran set data kita agar kita dapat menguji hingga 100.000 gambar

$ pip install Pillow
_6

Sekarang sudah cukup banyak gambar, saatnya untuk percobaan

Eksperimen untuk Menyimpan Banyak Gambar

Seperti yang Anda lakukan dengan membaca banyak gambar, Anda dapat membuat kamus yang menangani semua fungsi dengan

$ conda install -c conda-forge h5py
5 dan menjalankan percobaan

$ pip install Pillow
_7

Jika Anda mengikuti dan menjalankan kode sendiri, Anda perlu duduk sejenak dalam ketegangan dan menunggu 111.110 gambar disimpan tiga kali masing-masing ke disk Anda, dalam tiga format berbeda. Anda juga harus mengucapkan selamat tinggal pada sekitar 2 GB ruang disk

Sekarang untuk momen kebenaran. Berapa lama semua penyimpanan itu?

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?
Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Grafik pertama menunjukkan waktu penyimpanan normal dan tidak disesuaikan, menyoroti perbedaan drastis antara menyimpan ke

$ pip install lmdb
0 file dan LMDB atau HDF5

Grafik kedua menunjukkan

$ conda install -c conda-forge h5py
_7 dari pengaturan waktu, menyoroti bahwa HDF5 dimulai lebih lambat dari LMDB tetapi, dengan jumlah gambar yang lebih besar, keluar sedikit lebih cepat

Sementara hasil yang tepat dapat bervariasi tergantung pada mesin Anda, inilah mengapa LMDB dan HDF5 patut dipertimbangkan. Berikut kode yang menghasilkan grafik di atas

$ pip install Pillow
_8

Sekarang mari kita membaca kembali gambar-gambar itu

Membaca Gambar Tunggal

Pertama, mari pertimbangkan kasus untuk membaca satu gambar kembali ke dalam array untuk masing-masing dari ketiga metode tersebut

Membaca Dari Disk

Dari ketiga metode tersebut, LMDB membutuhkan kerja keras paling banyak saat membaca file gambar kembali dari memori, karena langkah serialisasi. Mari telusuri fungsi-fungsi ini yang membaca satu gambar untuk masing-masing dari tiga format penyimpanan

Pertama, baca satu gambar dan metanya dari file

$ pip install lmdb
0 dan
$ pip install h5py
0

$ pip install Pillow
_9

Hilangkan iklan

Membaca Dari LMDB

Selanjutnya, baca gambar dan meta yang sama dari LMDB dengan membuka lingkungan dan memulai transaksi baca

$ conda install -c conda-forge pillow
_0

Berikut adalah beberapa poin untuk tidak membahas cuplikan kode di atas

  • Baris 13. Bendera
    from pathlib import Path
    
    disk_dir = Path("data/disk/")
    lmdb_dir = Path("data/lmdb/")
    hdf5_dir = Path("data/hdf5/")
    
    _0 menetapkan bahwa tidak ada penulisan yang diizinkan pada file LMDB hingga transaksi selesai. Dalam istilah basis data, ini sama dengan mengambil kunci baca
  • Baris 20. Untuk mengambil objek CIFAR_Image, Anda perlu membalik langkah-langkah yang kami ambil untuk mengasinkannya saat kami menulisnya. Di sinilah
    from pathlib import Path
    
    disk_dir = Path("data/disk/")
    lmdb_dir = Path("data/lmdb/")
    hdf5_dir = Path("data/hdf5/")
    
    _1 objek sangat membantu

Ini mengakhiri membaca gambar kembali dari LMDB. Terakhir, Anda ingin melakukan hal yang sama dengan HDF5

Membaca Dari HDF5

Membaca dari HDF5 terlihat sangat mirip dengan proses penulisan. Berikut adalah kode untuk membuka dan membaca file HDF5 dan mengurai gambar dan meta yang sama

$ conda install -c conda-forge pillow
_1

Perhatikan bahwa Anda mengakses berbagai set data dalam file dengan mengindeks objek

from pathlib import Path

disk_dir = Path("data/disk/")
lmdb_dir = Path("data/lmdb/")
hdf5_dir = Path("data/hdf5/")
2 menggunakan nama set data yang diawali dengan garis miring
from pathlib import Path

disk_dir = Path("data/disk/")
lmdb_dir = Path("data/lmdb/")
hdf5_dir = Path("data/hdf5/")
3. Seperti sebelumnya, Anda dapat membuat kamus yang berisi semua fungsi baca

$ conda install -c conda-forge pillow
_2

Dengan menyiapkan kamus ini, Anda siap menjalankan percobaan

Eksperimen untuk Membaca Satu Gambar

Anda mungkin berharap bahwa eksperimen untuk membaca satu gambar akan memiliki hasil yang agak sepele, tetapi inilah kode eksperimennya

$ conda install -c conda-forge pillow
_3

Berikut adalah hasil percobaan untuk membaca satu gambar

MetodeBaca Gambar Tunggal + MetaDisk1. 61970 msLMDB4. 52063 msHDF51. 98036 mdtk

Ini sedikit lebih cepat untuk membaca file

$ pip install lmdb
_0 dan
$ pip install h5py
0 langsung dari disk, tetapi ketiga metode ini bekerja dengan sangat cepat. Eksperimen yang akan kita lakukan selanjutnya jauh lebih menarik

Membaca Banyak Gambar

Sekarang Anda dapat menyesuaikan kode untuk membaca banyak gambar sekaligus. Ini kemungkinan adalah tindakan yang paling sering Anda lakukan, sehingga kinerja runtime sangat penting

Hilangkan iklan

Menyesuaikan Kode untuk Banyak Gambar

Memperluas fungsi di atas, Anda dapat membuat fungsi dengan

from pathlib import Path

disk_dir = Path("data/disk/")
lmdb_dir = Path("data/lmdb/")
hdf5_dir = Path("data/hdf5/")
6, yang dapat digunakan untuk percobaan berikutnya. Seperti sebelumnya, menarik untuk membandingkan performa saat membaca jumlah gambar yang berbeda, yang diulangi dalam kode di bawah untuk referensi

$ conda install -c conda-forge pillow
_4

Dengan fungsi membaca disimpan dalam kamus seperti fungsi menulis, Anda siap untuk percobaan

Eksperimen untuk Membaca Banyak Gambar

Anda sekarang dapat menjalankan percobaan untuk membaca banyak gambar

$ conda install -c conda-forge pillow
_5

Seperti yang kita lakukan sebelumnya, Anda dapat membuat grafik hasil percobaan baca

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?
Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Grafik teratas menunjukkan waktu baca normal yang tidak disesuaikan, menunjukkan perbedaan drastis antara membaca dari file

$ pip install lmdb
0 dan LMDB atau HDF5

Sebaliknya, grafik di bagian bawah menunjukkan

$ conda install -c conda-forge h5py
7 dari pengaturan waktu, menyoroti perbedaan relatif dengan lebih sedikit gambar. Yaitu, kita dapat melihat bagaimana HDF5 dimulai di belakang tetapi, dengan lebih banyak gambar, menjadi lebih cepat secara konsisten daripada LMDB dengan selisih kecil

Plot Waktu BacaTampilkan/Sembunyikan

Menggunakan fungsi plot yang sama seperti untuk pengaturan waktu penulisan, kami memiliki yang berikut ini

$ conda install -c conda-forge pillow
_6

Dalam praktiknya, waktu tulis seringkali kurang kritis dibandingkan waktu baca. Bayangkan Anda sedang melatih jaringan saraf yang dalam pada gambar, dan hanya setengah dari seluruh kumpulan data gambar Anda yang cocok dengan RAM sekaligus. Setiap zaman pelatihan jaringan membutuhkan seluruh kumpulan data, dan model membutuhkan beberapa ratus zaman untuk konvergen. Anda pada dasarnya akan membaca setengah dari kumpulan data ke dalam memori setiap zaman

Ada beberapa trik yang dilakukan orang, seperti melatih zaman semu untuk membuatnya sedikit lebih baik, tetapi Anda mengerti

Sekarang, lihat kembali grafik baca di atas. Perbedaan antara waktu baca 40 detik dan 4 detik tiba-tiba adalah perbedaan antara menunggu enam jam untuk model Anda berlatih, atau empat puluh menit

Jika kita melihat waktu baca dan tulis pada bagan yang sama, kita memiliki yang berikut ini

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Plot Waktu Baca dan TulisTampilkan/Sembunyikan

Anda dapat memplot semua pengaturan waktu baca dan tulis pada satu grafik menggunakan fungsi plotting yang sama

$ conda install -c conda-forge pillow
_7

Saat Anda menyimpan gambar sebagai file

$ pip install lmdb
0, ada perbedaan besar antara waktu tulis dan baca. Namun, dengan LMDB dan HDF5, perbedaannya jauh lebih kecil. Secara keseluruhan, meskipun waktu baca lebih penting daripada waktu tulis, ada argumen kuat untuk menyimpan gambar menggunakan LMDB atau HDF5

Sekarang setelah Anda melihat manfaat kinerja LMDB dan HDF5, mari kita lihat metrik penting lainnya. penggunaan disk

Hilangkan iklan

Mempertimbangkan Penggunaan Disk

Kecepatan bukan satu-satunya metrik kinerja yang mungkin Anda minati. Kami sudah berurusan dengan kumpulan data yang sangat besar, jadi ruang disk juga merupakan masalah yang sangat valid dan relevan

Misalkan Anda memiliki kumpulan data gambar 3TB. Agaknya, Anda sudah memilikinya di disk di suatu tempat, tidak seperti contoh CIFAR kami, jadi dengan menggunakan metode penyimpanan alternatif, Anda pada dasarnya membuat salinannya, yang juga harus disimpan. Melakukan hal itu akan memberi Anda manfaat kinerja yang sangat besar saat Anda menggunakan gambar, tetapi Anda harus memastikan bahwa Anda memiliki cukup ruang disk

Berapa banyak ruang disk yang digunakan berbagai metode penyimpanan?

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Membuat Plot Batang untuk Penggunaan Ruang DiskTampilkan/Sembunyikan

Saya menggunakan perintah Linux

disk_dir.mkdir(parents=True, exist_ok=True)
lmdb_dir.mkdir(parents=True, exist_ok=True)
hdf5_dir.mkdir(parents=True, exist_ok=True)
_0 untuk menghitung penggunaan disk pada sistem saya. Ada beberapa perkiraan yang melekat pada metode ini karena pembulatan, tapi inilah perbandingan umumnya

$ conda install -c conda-forge pillow
_8

HDF5 dan LMDB menggunakan lebih banyak ruang disk daripada jika Anda menyimpan menggunakan gambar

$ pip install lmdb
0 normal. Penting untuk dicatat bahwa penggunaan dan kinerja disk LMDB dan HDF5 sangat bergantung pada berbagai faktor, termasuk sistem operasi dan, yang lebih penting lagi, ukuran data yang Anda simpan

LMDB mendapatkan efisiensinya dari caching dan memanfaatkan ukuran halaman OS. Anda tidak perlu memahami cara kerjanya, tetapi perhatikan bahwa dengan gambar yang lebih besar, Anda akan berakhir dengan penggunaan disk yang jauh lebih banyak dengan LMDB, karena gambar tidak muat di halaman LMDB, lokasi penyimpanan biasa di pohon, dan . Bilah LMDB pada bagan di atas akan keluar dari bagan

Gambar 32x32x3 piksel kami relatif kecil dibandingkan dengan gambar rata-rata yang mungkin Anda gunakan, dan memungkinkan performa LMDB yang optimal

Meskipun kami tidak akan menjelajahinya di sini secara eksperimental, menurut pengalaman saya sendiri dengan gambar berukuran 256x256x3 atau 512x512x3 piksel, HDF5 biasanya sedikit lebih efisien dalam hal penggunaan disk daripada LMDB. Ini adalah transisi yang baik ke bagian akhir, sebuah diskusi kualitatif tentang perbedaan antara metode-metode tersebut

Diskusi

Ada fitur pembeda lain dari LMDB dan HDF5 yang perlu diketahui, dan penting juga untuk membahas secara singkat beberapa kritik dari kedua metode tersebut. Beberapa tautan disertakan bersama dengan diskusi jika Anda ingin mempelajari lebih lanjut

Akses Paralel

Perbandingan utama yang tidak kami uji dalam percobaan di atas adalah membaca dan menulis secara bersamaan. Seringkali, dengan kumpulan data sebesar itu, Anda mungkin ingin mempercepat operasi Anda melalui paralelisasi

Dalam sebagian besar kasus, Anda tidak akan tertarik membaca bagian dari gambar yang sama pada waktu yang sama, tetapi Anda ingin membaca banyak gambar sekaligus. Dengan definisi konkurensi ini, menyimpan ke disk sebagai

$ pip install lmdb
0 file sebenarnya memungkinkan konkurensi lengkap. Tidak ada yang menghalangi Anda untuk membaca beberapa gambar sekaligus dari utas yang berbeda, atau menulis banyak file sekaligus, selama nama gambar berbeda

Bagaimana dengan LMDB? . Anda dapat membaca lebih lanjut tentang itu di situs web teknologi LMDB

Beberapa aplikasi dapat mengakses database LMDB yang sama secara bersamaan, dan beberapa utas dari proses yang sama juga dapat secara bersamaan mengakses LMDB untuk membaca. Ini memungkinkan waktu baca yang lebih cepat. jika Anda membagi semua CIFAR menjadi sepuluh set, maka Anda dapat menyiapkan sepuluh proses untuk setiap pembacaan dalam satu set, dan itu akan membagi waktu pemuatan menjadi sepuluh

HDF5 juga menawarkan I/O paralel, yang memungkinkan pembacaan dan penulisan bersamaan. Namun, dalam penerapannya, kunci tulis ditahan, dan aksesnya berurutan, kecuali jika Anda memiliki sistem file paralel

Ada dua opsi utama jika Anda mengerjakan sistem seperti itu, yang dibahas lebih mendalam dalam artikel ini oleh Grup HDF pada IO paralel. Ini bisa menjadi sangat rumit, dan opsi paling sederhana adalah dengan membagi kumpulan data Anda secara cerdas menjadi beberapa file HDF5, sehingga setiap proses dapat menangani satu file

disk_dir.mkdir(parents=True, exist_ok=True)
lmdb_dir.mkdir(parents=True, exist_ok=True)
hdf5_dir.mkdir(parents=True, exist_ok=True)
3 secara terpisah dari yang lain

Dokumentasi

Jika Anda Google

disk_dir.mkdir(parents=True, exist_ok=True)
lmdb_dir.mkdir(parents=True, exist_ok=True)
hdf5_dir.mkdir(parents=True, exist_ok=True)
_4, setidaknya di Inggris Raya, hasil pencarian ketiga adalah IMDb, Internet Movie Database. Bukan itu yang Anda cari

Sebenarnya, ada satu sumber dokumentasi utama untuk pengikatan Python LMDB, yang dihosting. Sementara paket Python bahkan belum mencapai versi > 0. 94, cukup banyak digunakan dan dianggap stabil

Adapun teknologi LMDB itu sendiri, ada dokumentasi yang lebih rinci di situs web teknologi LMDB, yang bisa terasa seperti belajar kalkulus di kelas dua, kecuali jika Anda memulai dari halaman Memulai mereka

Untuk HDF5, ada dokumentasi yang sangat jelas di situs h5py docs, serta postingan blog yang bermanfaat dari Christopher Lovell, yang merupakan ikhtisar bagus tentang cara menggunakan paket

disk_dir.mkdir(parents=True, exist_ok=True)
lmdb_dir.mkdir(parents=True, exist_ok=True)
hdf5_dir.mkdir(parents=True, exist_ok=True)
5. Buku O'Reilly, Python dan HDF5 juga merupakan cara yang baik untuk memulai

Meskipun tidak terdokumentasi seperti yang mungkin dihargai oleh pemula, baik LMDB dan HDF5 memiliki komunitas pengguna yang besar, sehingga pencarian Google yang lebih dalam biasanya menghasilkan hasil yang bermanfaat

Hilangkan iklan

Pandangan Lebih Kritis pada Implementasi

Tidak ada utopia dalam sistem penyimpanan, dan baik LMDB maupun HDF5 memiliki kekurangan masing-masing

Poin kunci untuk dipahami tentang LMDB adalah bahwa data baru ditulis tanpa menimpa atau memindahkan data yang ada. Ini adalah keputusan desain yang memungkinkan pembacaan sangat cepat yang Anda saksikan dalam eksperimen kami, dan juga menjamin integritas dan keandalan data tanpa perlu tambahan menyimpan log transaksi

Ingat, bagaimanapun, bahwa Anda perlu menentukan parameter

$ pip install h5py
2 untuk alokasi memori sebelum menulis ke database baru? . Misalkan Anda telah membuat database LMDB, dan semuanya bagus. Anda telah menunggu dengan sabar kumpulan data Anda yang sangat besar untuk dikemas ke dalam LMDB

Kemudian, nanti, Anda ingat bahwa Anda perlu menambahkan data baru. Bahkan dengan buffer yang Anda tentukan pada

$ pip install h5py
_2 Anda, Anda dapat dengan mudah melihat kesalahan
disk_dir.mkdir(parents=True, exist_ok=True)
lmdb_dir.mkdir(parents=True, exist_ok=True)
hdf5_dir.mkdir(parents=True, exist_ok=True)
8. Kecuali jika Anda ingin menulis ulang seluruh database Anda, dengan
$ pip install h5py
2 yang diperbarui, Anda harus menyimpan data baru tersebut dalam file LMDB terpisah. Meskipun satu transaksi dapat menjangkau banyak file LMDB, memiliki banyak file masih bisa merepotkan

Selain itu, beberapa sistem memiliki batasan berapa banyak memori yang dapat diklaim sekaligus. Dalam pengalaman saya sendiri, bekerja dengan sistem komputasi kinerja tinggi (HPC), ini terbukti sangat membuat frustrasi, dan sering kali membuat saya lebih memilih HDF5 daripada LMDB

Dengan LMDB dan HDF5, hanya item yang diminta yang dibaca ke dalam memori sekaligus. Dengan LMDB, pasangan unit kunci dibaca ke dalam memori satu per satu, sedangkan dengan HDF5, objek

from PIL import Image
import csv

def store_single_disk(image, image_id, label):
    """ Stores a single image as a .png file on disk.
        Parameters:
        ---------------
        image       image array, (32, 32, 3) to be stored
        image_id    integer unique ID for image
        label       image label
    """
    Image.fromarray(image).save(disk_dir / f"{image_id}.png")

    with open(disk_dir / f"{image_id}.csv", "wt") as csvfile:
        writer = csv.writer(
            csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL
        )
        writer.writerow([label])
0 dapat diakses seperti larik Python, dengan pengindeksan
from PIL import Image
import csv

def store_single_disk(image, image_id, label):
    """ Stores a single image as a .png file on disk.
        Parameters:
        ---------------
        image       image array, (32, 32, 3) to be stored
        image_id    integer unique ID for image
        label       image label
    """
    Image.fromarray(image).save(disk_dir / f"{image_id}.png")

    with open(disk_dir / f"{image_id}.csv", "wt") as csvfile:
        writer = csv.writer(
            csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL
        )
        writer.writerow([label])
1, rentang,
from PIL import Image
import csv

def store_single_disk(image, image_id, label):
    """ Stores a single image as a .png file on disk.
        Parameters:
        ---------------
        image       image array, (32, 32, 3) to be stored
        image_id    integer unique ID for image
        label       image label
    """
    Image.fromarray(image).save(disk_dir / f"{image_id}.png")

    with open(disk_dir / f"{image_id}.csv", "wt") as csvfile:
        writer = csv.writer(
            csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL
        )
        writer.writerow([label])
2 dan penyambungan lainnya
from PIL import Image
import csv

def store_single_disk(image, image_id, label):
    """ Stores a single image as a .png file on disk.
        Parameters:
        ---------------
        image       image array, (32, 32, 3) to be stored
        image_id    integer unique ID for image
        label       image label
    """
    Image.fromarray(image).save(disk_dir / f"{image_id}.png")

    with open(disk_dir / f"{image_id}.csv", "wt") as csvfile:
        writer = csv.writer(
            csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL
        )
        writer.writerow([label])
3

Karena cara sistem dioptimalkan, dan bergantung pada sistem operasi Anda, urutan item yang Anda akses dapat memengaruhi kinerja

Dalam pengalaman saya, secara umum benar bahwa untuk LMDB, Anda mungkin mendapatkan kinerja yang lebih baik saat mengakses item secara berurutan dengan kunci (pasangan nilai kunci disimpan dalam memori yang diurutkan secara alfanumerik dengan kunci), dan untuk HDF5, mengakses rentang besar akan bekerja lebih baik daripada membaca

$ conda install -c conda-forge pillow
_9

Jika Anda sedang mempertimbangkan pilihan format penyimpanan file untuk menulis perangkat lunak Anda, akan lalai untuk tidak menyebutkan Pindah dari HDF5 oleh Cyrille Rossant pada perangkap HDF5, dan tanggapan Konrad Hinsen Pada HDF5 dan masa depan manajemen data, yang mana . Perhatikan bahwa kumpulan data yang relatif lebih kecil masih berukuran beberapa GB

Integrasi Dengan Perpustakaan Lain

Jika Anda berurusan dengan kumpulan data yang sangat besar, kemungkinan besar Anda akan melakukan sesuatu yang signifikan dengannya. Penting untuk mempertimbangkan perpustakaan pembelajaran mendalam dan jenis integrasi apa yang ada dengan LMDB dan HDF5

Pertama-tama, semua perpustakaan mendukung membaca gambar dari disk sebagai

$ pip install lmdb
0 file, selama Anda mengubahnya menjadi array NumPy dari format yang diharapkan. Ini berlaku untuk semua metode, dan kita telah melihat di atas bahwa relatif mudah untuk membaca gambar sebagai array

Berikut adalah beberapa perpustakaan pembelajaran mendalam paling populer dan integrasi LMDB dan HDF5 mereka

  • Caffe memiliki integrasi LMDB yang stabil dan didukung dengan baik, dan menangani langkah membaca secara transparan. Lapisan LMDB juga dapat dengan mudah diganti dengan database HDF5

  • Keras menggunakan format HDF5 untuk menyimpan dan memulihkan model. Ini menyiratkan bahwa TensorFlow juga bisa

  • TensorFlow memiliki kelas bawaan

    from PIL import Image
    import csv
    
    def store_single_disk(image, image_id, label):
        """ Stores a single image as a .png file on disk.
            Parameters:
            ---------------
            image       image array, (32, 32, 3) to be stored
            image_id    integer unique ID for image
            label       image label
        """
        Image.fromarray(image).save(disk_dir / f"{image_id}.png")
    
        with open(disk_dir / f"{image_id}.csv", "wt") as csvfile:
            writer = csv.writer(
                csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL
            )
            writer.writerow([label])
    
    5 yang menyediakan antarmuka untuk membaca data input dari file LMDB dan dapat menghasilkan iterator dan tensor dalam batch. TensorFlow tidak memiliki kelas bawaan untuk HDF5, tetapi dapat ditulis yang mewarisi dari kelas
    from PIL import Image
    import csv
    
    def store_single_disk(image, image_id, label):
        """ Stores a single image as a .png file on disk.
            Parameters:
            ---------------
            image       image array, (32, 32, 3) to be stored
            image_id    integer unique ID for image
            label       image label
        """
        Image.fromarray(image).save(disk_dir / f"{image_id}.png")
    
        with open(disk_dir / f"{image_id}.csv", "wt") as csvfile:
            writer = csv.writer(
                csvfile, delimiter=" ", quotechar="|", quoting=csv.QUOTE_MINIMAL
            )
            writer.writerow([label])
    
    6. Saya pribadi menggunakan kelas khusus yang dirancang untuk akses baca optimal berdasarkan cara saya menyusun file HDF5 saya

  • Theano tidak secara native mendukung format file atau database tertentu, tetapi seperti yang dinyatakan sebelumnya, dapat menggunakan apa saja asalkan dibaca sebagai array N-dimensi

Meskipun jauh dari komprehensif, semoga ini memberi Anda gambaran tentang integrasi LMDB/HDF5 oleh beberapa pustaka pembelajaran mendalam utama

Beberapa Wawasan Pribadi tentang Menyimpan Gambar dengan Python

Dalam pekerjaan saya sehari-hari menganalisis terabyte gambar medis, saya menggunakan LMDB dan HDF5, dan telah belajar bahwa, dengan metode penyimpanan apa pun, pemikiran ke depan sangat penting.

Seringkali, model perlu dilatih menggunakan validasi silang k-fold, yang melibatkan pemisahan seluruh dataset menjadi k-set (k biasanya 10), dan model k dilatih, masing-masing dengan k-set yang berbeda digunakan sebagai set pengujian. Hal ini memastikan bahwa model tidak melakukan overfitting pada kumpulan data, atau, dengan kata lain, tidak dapat membuat prediksi yang baik pada data yang tidak terlihat.

Cara standar untuk membuat k-set adalah dengan menempatkan representasi yang sama dari setiap jenis data yang diwakili dalam dataset di setiap k-set. Dengan demikian, menyimpan setiap k-set ke dalam dataset HDF5 yang terpisah akan memaksimalkan efisiensi. Kadang-kadang, satu k-set tidak dapat dimuat ke dalam memori sekaligus, jadi bahkan urutan data dalam kumpulan data memerlukan beberapa pemikiran sebelumnya.

Dengan LMDB, saya juga berhati-hati untuk membuat rencana ke depan sebelum membuat database. Ada beberapa pertanyaan bagus yang perlu ditanyakan sebelum Anda menyimpan gambar

  • Bagaimana saya bisa menyimpan gambar sedemikian rupa sehingga sebagian besar bacaan akan berurutan?
  • Apa kunci yang bagus?
  • Bagaimana saya bisa menghitung
    $ pip install h5py
    
    2 yang baik, mengantisipasi kemungkinan perubahan di masa mendatang dalam kumpulan data?
  • Seberapa besar sebuah transaksi tunggal, dan bagaimana seharusnya transaksi dibagi lagi?

Apa pun metode penyimpanannya, saat Anda berurusan dengan kumpulan data gambar besar, sedikit perencanaan akan sangat membantu

Hilangkan iklan

Kesimpulan

Anda berhasil sampai akhir. Anda sekarang memiliki pandangan sekilas tentang topik besar

Dalam artikel ini, Anda telah diperkenalkan dengan tiga cara menyimpan dan mengakses banyak gambar dengan Python, dan mungkin berkesempatan untuk bermain dengan beberapa di antaranya. Semua kode untuk artikel ini ada di notebook Jupyter di sini atau skrip Python di sini. Jalankan dengan risiko Anda sendiri, karena beberapa GB ruang disk Anda akan diambil alih oleh gambar persegi kecil dari mobil, kapal, dan sebagainya.

Anda telah melihat bukti bagaimana berbagai metode penyimpanan dapat memengaruhi waktu baca dan tulis secara drastis, serta beberapa pro dan kontra dari ketiga metode yang dibahas dalam artikel ini. Meskipun menyimpan gambar sebagai file

$ pip install lmdb
0 mungkin yang paling intuitif, ada manfaat kinerja yang besar untuk mempertimbangkan metode seperti HDF5 atau LMDB

Jangan ragu untuk berdiskusi di bagian komentar tentang metode penyimpanan luar biasa yang tidak tercakup dalam artikel ini, seperti LevelDB, Feather, TileDB, Badger, BoltDB, atau yang lainnya. Tidak ada metode penyimpanan yang sempurna, dan metode terbaik bergantung pada kumpulan data spesifik dan kasus penggunaan Anda

Bacaan lebih lanjut

Berikut adalah beberapa referensi terkait ketiga metode yang dibahas dalam artikel ini

  • dokumentasi LMDB. Mulai
  • Pengikatan python untuk HDF5 (h5py)
  • Grup HDF5
  • "Python dan HDF5" dari O'Reilly
  • Bantal

Anda juga dapat menghargai "Analisis sistem penyimpanan gambar untuk pelatihan jaringan saraf dalam yang dapat diskalakan" oleh Lim, Young, dan Patton. Makalah itu mencakup eksperimen yang serupa dengan yang ada di artikel ini, tetapi dalam skala yang jauh lebih besar, dengan mempertimbangkan cache dingin dan hangat serta faktor lainnya

Tandai sebagai Selesai

🐍 Trik Python 💌

Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Kirimi Saya Trik Python »

Tentang Rebecca Stone

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?
Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Rebecca adalah mahasiswa PhD dalam visi komputer dan kecerdasan buatan yang diterapkan pada citra medis. Dia bersemangat mengajar

» Lebih lanjut tentang Rebecca


Setiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Aldren

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Geir Arne

Bagaimana cara memasukkan gambar ke dalam database sql menggunakan python?

Joanna

Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista

Tingkatkan Keterampilan Python Anda »

Guru Keterampilan Python Dunia Nyata
Dengan Akses Tak Terbatas ke Real Python

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista

Tingkatkan Keterampilan Python Anda »

Bagaimana menurut anda?

Nilai artikel ini

Tweet Bagikan Bagikan Email

Apa takeaway # 1 Anda atau hal favorit yang Anda pelajari?

Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami

Bagaimana cara memasukkan gambar dalam database SQLite dengan Python?

Implementasi. .
Atur koneksi ke database SQLite menggunakan kode Python. .
Kita perlu mendefinisikan kueri INSERT untuk memasukkan data BLOB ke dalam tabel. .
Mengubah file yang dapat dibaca manusia menjadi data biner dengan memanggil fungsi convertToBinaryData() ini, dan menyimpannya di variabel empPhoto,

Bagaimana cara memasukkan file ke dalam database MySQL menggunakan Python?

Memasukkan data ke tabel MySQL menggunakan python .
impor mysql. paket konektor
Buat objek koneksi menggunakan mysql. penyambung. .
Buat objek kursor dengan memanggil metode cursor() pada objek koneksi yang dibuat di atas
Kemudian, jalankan pernyataan INSERT dengan meneruskannya sebagai parameter ke metode execution()

Bisakah saya menyimpan gambar di MySQL?

Binary Large Object ( BLOB ) adalah tipe data MySQL yang dapat menyimpan data biner seperti file gambar, multimedia, dan PDF .

Bisakah Anda memasukkan gambar ke dalam database?

Database memberi Anda kesempatan untuk menyimpan foto dan gambar kecil lainnya di tabel database . Anda dapat membuat tabel database seperti itu misalnya ketika Anda ingin membuat album foto online dengan deskripsi foto Anda. Menyimpan gambar dalam tabel database tidak disarankan.