Mengelola foto dan video hasil dari survei menggunakan kamera intai
Ryan Avriandy
Forum Harimaukita | April 2024
Tujuan
Presentasi ini akan membahas mengenai;
Memberikan gambaran umum mengenai pengelolaan data kamera intai
Limitasi
Ada banyak cara dalam pengelolaan data, yang akan disajikan dalam presentasi ini adalah yang biasa kami lakukan
Alur kerja kamera intai
Skenario yang sering terjadi;
Kamera yang dipasang tidak dilengkapi dengan catatan lapangan yang konsisten dan lengkap.
Hasil yang diperoleh disalin ke komputer dalam struktur folder yang tidak teratur.
Rekaman ditulis secara manual ke dalam lembar kerja (Excel).
Sisa foto tidak dilanjutkan identifikasinya.
Data kamera intai
Foto / video
Data pemasangan (kapan + dimana)
Hubungan antara (1) dan (2)
Data pemasangan kamera
Esensial
Nama stasiun
Kordinat setiap stasiun
Tanggal pemasangan kamera
Tanggal kamera berhenti bekerja
Diupayakan
Kolom lainnya (Informasi lingkungan disekitar pemasangan kamera)
Prosedur Pengelolaan Data
Scotson et al. 2017 meninjau berbagai macam prosedur dan perangkat lunak yang ada untuk mengelola data kamera intai.
Dalam panduan ini, kami mengadopsi protokol pengelolaan data kamera pengintai menggunakan ‘camtrapR’ karena;
Gratis
Kapasitas penyimpanan tidak terbatas*
Fleksibilitas untuk analisis data yang lebih kompleks
Alur Kerja Pengelolaan Data
Alur kerja pengelolaan data dengan ‘camtrapR’ dibagi menjadi lima bagian
Organisir Data Kamera Intai:Langkah ke-1
Setelah mengunduh data dari kamera intai, kelola data tersebut dengan hirarki folder sebagai berikut;
Nama lanskap
Nama proyek / lokasi survei
Images_raw
Nama stasiun
Foto/Video
Organisir Data Kamera Intai:Langkah ke-2
Cadangkan data tersebut kedalam folder baru dan biarkan data `mentah/raw` tetap tersimpan sebagai cadangan atau rujukan apabila terdapat kesalahan dalam proses organisir data
Nama lanskap
Nama proyek / lokasi survei
Images_renamed
Nama stasiun
Foto/Video
Organisir Data Kamera Intai:Langkah ke-3
Mengganti nama setiap foto/video sehingga setiap data memiliki nama yang unik dan informatif untuk mempermudah proses verifikasi dari lembar data
Dalam camtrapR dapat menggunakan fungsi ‘imageRename()’
Data tersebut akan diganti dengan format; NamaStasiun_YYY-MM-DD__HH-MM-SS(n).JPG
Identifikasi spesies / individu
Dari data mentah yang sudah disalin pada langkah ke-3, lakukan proses identifikasi dengan memindahkan foto ke dalam hirarki folder sebagai berikut;
Images_renamed
Nama stasiun
Nama spesies
Foto/Video
Identifikasi spesies - tips
Identifikasi semua spesies
Identifikasi hingga takson terendah
Berikan nama unik untuk spesies yang belum bisa diidentifikasi hingga tingkat spesies
Burung ❌
Unidentified ❌
Pitta sp1 ✅
Paok sp1 ✅
— Step 1 — Memproses data kamera intai
Instalasi perangkat lunak yang dibutuhkan
Komponen penting yang diperlukan untuk menggunakan camtrapR adalah perangkat lunak R studio dan Exiftool. Penjelasan dan langkah instalasi R studio dapat dilihat pada tautan berikut ini ‘Panduan instalasi Rstudio.’
Instalasi Exiftool
Exiftool digunakan untuk membaca dan menulis metadata dari gambar dan video. Untuk menggunakannya, unduh melalui situs ini; ‘Exiftool’ dengan cara sebagai berikut;.
Pastikan mengunduh file stand-alone executable.
Ekstrak berkas unduhan dari format (.zip).
Ubah nama file “exiftool(-k).exe” yang terdapat di dalamnya menjadi “exiftool.exe”
Simpan pada direktori “C:/Windows”
Pastikan untuk mengikuti langkah-langkah tersebut agar dapat menggunakan exiftool dengan benar dan efektif.
Memuat pengaturan awal
# Membuat daftar paket yang dibutuhkanpackage.list=c("exiftoolr", "camtrapR", "tidyverse", "lubridate", "sf", "mapview", "unmarked", "secr", "knitr", "kableExtra", "overlap")# Mengunduh seluruh paket yang belum ada dan memuatnya kedalam sistemfor (package in package.list) {if (!require(package, character.only=T, quietly=T)) {install.packages(package)library(package, character.only=T) }}
Mengatur tempat penyimpanan data
Mengunduh semua data yang dibutuhkan pada tautan ini; simulasi_fhk_kk_ct Setelah itu ekstrak data yang dibutuhkan dan simpan ke dalam satu folder simulasi data.
Membuat cadangan data dan mengganti namanya
Jalankan skrip dibawah ini untuk membuat cadangan data dan mengganti nama file foto/video
# Mengatur lokasi folder untuk analisissetwd("D:/simulasi_fhk/Round_1") #bisa diganti untuk directory yang berbeda# Mengatur lokasi folder kamera intai yang mau dianalisisimages_raw <-"D:/simulasi_fhk/Round_1/images_raw"# Mengatur lokasi folder kamera intai yang akan diganti nama filenyaimages_renamed <-"D:/simulasi_fhk/Round_1/images_renamed"# Salin foto kamera intai ke dalam folder baru dan mengganti nama filenyarenamed <-imageRename(inDir = images_raw,outDir = images_renamed,hasCameraFolders =FALSE,copyImages =TRUE)
Menambahkan label hak cipta
Jalankan skrip dibawah ini untuk membuat cadangan data dan mengganti nama file foto/video
# Nama label hak ciptacopyrightTagToAdd <-"FHK2014"# Menambahkan label hak ciptaaddCopyrightTag(inDir = images_renamed,copyrightTag = copyrightTagToAdd,askFirst =FALSE,keepJPG_original =FALSE)
# Membaca data kamera intai dan menyalinnya kedalam data tabular sebagai tabel deteksi spesiesrec_db <-recordTable(inDir = images_renamed,IDfrom ="directory")# Memeriksa nama latin dengan pangkalan data ITISsplist <-unique(rec_db$Species)checkNames <-checkSpeciesNames (speciesNames = splist,searchtype ="scientific")
# Membuat matiks hari aktif kameracamop <-cameraOperation(CTtable = effort,stationCol ="Station",setupCol ="Setup_date",retrievalCol ="Retrieval_date",writecsv =FALSE,hasProblems =TRUE, #TRUE, ketika diketahui ada kamera yang tidak aktif hingga waktu pengambilandateFormat ="%d-%b-%y")# Membuat plot matriks camtrapR:::camopPlot(camop)
# Menambahkan satu kolom berisi tanggal dan waktu sekaligusdetection <- detection %>%mutate(DateTimeOriginal =as.POSIXct(paste(Date, Time)))# Membuat independent event dengan batas waktu 30 menitdetection_30m <- detection %>%filter(!Scientific.Name=='StartEnd') %>%#Mengeluarkan tim yang memasang dan melepas kamera camtrapR:::assessTemporalIndependence(deltaTimeComparedTo ="lastIndepentRecord",columnOfInterest ="Scientific.Name",stationCol ="Station",minDeltaTime =30,camerasIndependent =FALSE) %>%drop_na(Scientific.Name) %>% dplyr::select(Station, Scientific.Name, DateTimeOriginal, FileName, n_images) %>%mutate(IE =1)# Membuat ringkasan temuan satwasum_table <- detection_30m %>%group_by(Scientific.Name) %>%summarise(n_images =sum(n_images),IE =sum(IE),n_locs =n_distinct(Station)) %>%ungroup() %>%mutate(RAI = IE / (effective_trap_nights/100),`raw_occ`= n_locs / total_stations) %>%mutate(across(5:last_col(), ~round(., 2))) %>%arrange(desc(n_images))# Membuat plot ringkasan temuan satwalayout(matrix(c(1,1,2), 1, 3, byrow =TRUE))par(mar=c(5,16,1,1))barplot(sum_table$IE,names.arg =as.expression(lapply(sum_table$Scientific.Name, function(x) bquote(italic(.(x))))),las =1, cex.names =1, xlab ="Independent event", horiz =TRUE)par(mar=c(5,1,1,1))barplot(sum_table$raw_occ, las=1, cex.names=0.7, xlab="Proportion of sites detected", horiz=T, xlim=c(0,1))
Table 4: Ringkasan temuan satwa
Scientific.Name
n_images
IE
n_locs
RAI
raw_occ
Macaca fascicularis
7
3
2
3.28
0.67
Chalcophaps indica
3
1
1
1.09
0.33
Macaca nemestrina
3
1
1
1.09
0.33
Varanus salvator
2
1
1
1.09
0.33
Presbytis cristata
1
1
1
1.09
0.33
Figure 2: Plot ringkasan temuan satwa
— Step 2 — Ekplorasi data lebih lanjut
Memuat dataset baru
Perhatian
Karena data kamera sebenarnya terikat dengan Perjanjian Kerahasiaan (NDA), untuk kelas ini kita akan menggunakan data yang dapat diakses publik melalui situs DRYAD. Data yang disajikan sudah diedit untuk memudahkan praktik, sehingga hasil dari simulasi ini tidak menggambarkan hasil nyata dari penulis aslinya
# Mengatur lokasi folder untuk analisissetwd("D:/simulasi_fhk/Round_2") #bisa diganti untuk directory yang berbeda# Membaca data stasiun kamera yang barueffort <-read.csv("station_adv.csv")# Membaca data deteksi satwa yang barudetection <-read.csv("detection_adv.csv")detection <- detection %>%mutate(DateTimeOriginal =as.POSIXct(paste(Date, Time), format ="%d-%b-%y %H:%M"))
# Membuat data sebaran spesiesmap_sp <-detectionMaps(CTtable = effort,recordTable = detection,Xcol ="Longitude",Ycol ="Latitude",stationCol ="Station",speciesCol ="Scientific.Name",printLabels =TRUE,richnessPlot =FALSE,speciesPlots =FALSE,addLegend =TRUE)# Menampilkan sebaran spesies di petamap_sp <-st_as_sf(map_sp, coords =c("Longitude", "Latitude"),crs ="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")mapview(map_sp, zcol ="n_species", layer.name ="Species Number")# Membuat file shapefile dari data tersebutoutput_shapefile <-"D:/simulasi_fhk/Round_2/sebaran.shp"# Export temuan spesies ke shapefilest_write(map_sp, output_shapefile)
# Membuat grafik aktivitas satwadetection_30m$Species <- detection_30m$Scientific.Name# Membuat pola aktivitas bobcatactivityDensity(recordTable = detection_30m,species ='Lynx rufus') # ganti nama spesies ini untuk satwa lainnya# Membuat pola aktivitas tumpang tindih antara 2 spesiesactivityOverlap (recordTable = detection_30m,speciesA ="Lynx rufus",speciesB ="Ursus americanus",plotR =TRUE,pngMaxPix =1000,linecol =c("black", "blue"),linewidth =c(5,3),linetype =c(1, 2),olapcol ="darkgrey",add.rug =TRUE,extend ="lightgrey",ylim =c(0, 0.25),main =paste("Tumpang tindih: ", "Lynx rufus", "-", "Ursus americanus"))
Membuat grafik aktivitas satwa (Tingkat lanjut)
Dalam paper yang ditulis oleh Ridout and Linkie (2009), penulis mengestimasi koefisien tumpang tindih kepadatan untuk dua spesies dan menghitung estimasi interval kepercayaan dengan menggunakan bootstrap. Kita dapat mereplikasi analisis tersebut dengan cara sebagai berikut
library(overlap)# Mengganti informasi waktu seusai dengan format yang dibutuhkan dalam package overlapdetection_30m$time <- (hour(detection_30m$DateTimeOriginal)*60+minute(detection_30m$DateTimeOriginal))/(24*60) detection_30m$radtime <- detection_30m$time *2* pi# Membuat aktivitas satwa yang mau dianalisisberuang <- detection_30m[detection_30m$Scientific.Name =="Ursus americanus",]$radtimekucing <- detection_30m[detection_30m$Scientific.Name =="Lynx rufus",]$radtime# Memlihat jumlah observasi kedua spesies tersebutlength(beruang) +length(kucing)
[1] 239
Jika total kedua sampel >50, estimator yang akan digunakan adalah Dhat4, namun jika kurang dari itu parameter yang akan digunakan adalah Dhat1. Dalam konteks ini karena sampel kedua data sejumlah 239, kita akan menggunakan estimator Dhat4
overlap_est <-overlapEst(beruang, kucing, type="Dhat4")bs <-bootstrap(beruang, kucing, 1000, #jumlah pengulangan yang akan dipergunakantype="Dhat4")mean(bs)
[1] 0.574076
bootCI(overlap_est,bs)['basic0', ]
lower upper
0.2613035 0.6744936
Pada hasil tersebut didapatkan estimasi tumpang tindih dengan interval kepercayaan sebesar 0,58 (0,26 - 0,66)
— Step 3 — Membuat matriks deteksi untuk analisis okupansi
Membuat matriks deteksi untuk analisis okupansi
DetHist <-detectionHistory(recordTable = detection,camOp = camop_adv,stationCol ="Station",speciesCol ="Scientific.Name",recordDateTimeCol ="DateTimeOriginal",species ="Lynx rufus", #ganti untuk spesies lainoccasionLength =5, #ganti nilai ini jika diperlukanday1 ="station",datesAsOccasionNames =FALSE,includeEffort =TRUE,scaleEffort =FALSE)# Melihat matriks deteksiDetHist$detection_history
o1 o2 o3 o4 o5 o6 o7
SCBI_17 0 1 0 0 0 NA NA
SCBI_18 0 0 0 0 0 NA NA
SCBI_21 0 0 0 0 0 NA NA
SCBI_22 0 0 0 0 1 NA NA
SCBI_23 0 0 0 0 0 NA NA
SCBI_27 0 0 0 0 0 0 NA
SCBI_28 0 0 0 1 0 0 0
SCBI_29 0 1 0 0 0 NA NA
SCBI_30 0 1 0 0 0 NA NA
SCBI_34 1 0 0 0 0 0 0
SCBI_36 0 0 0 NA NA NA NA
SCBI_37 0 0 0 NA NA NA NA
SCBI_4 0 0 0 NA NA NA NA
SCBI_41 0 0 0 0 NA NA NA
# Melihat usaha per deteksiDetHist$effort
o1 o2 o3 o4 o5 o6 o7
SCBI_17 4.5 5 5.0 5.0 1.5 NA NA
SCBI_18 4.5 5 5.0 5.0 3.5 NA NA
SCBI_21 4.5 5 5.0 5.0 4.5 NA NA
SCBI_22 4.5 5 5.0 5.0 4.5 NA NA
SCBI_23 4.5 5 5.0 5.0 3.5 NA NA
SCBI_27 4.5 5 5.0 5.0 5.0 4.5 NA
SCBI_28 4.5 5 5.0 5.0 5.0 5.0 4.5
SCBI_29 4.5 5 5.0 5.0 3.5 NA NA
SCBI_30 4.5 5 5.0 5.0 3.5 NA NA
SCBI_34 4.5 5 5.0 5.0 5.0 5.0 1.5
SCBI_36 4.5 5 4.5 NA NA NA NA
SCBI_37 4.5 5 1.5 NA NA NA NA
SCBI_4 4.5 5 4.5 NA NA NA NA
SCBI_41 4.5 5 5.0 0.5 NA NA NA
# Melihat ringkasan dataumf <-unmarkedFrameOccu(y=DetHist[["detection_history"]])summary(umf)
unmarkedFrame Object
14 sites
Maximum number of observations per site: 7
Mean number of observations per site: 4.86
Sites with at least one detection: 6
Tabulation of y observations:
0 1 <NA>
62 6 30
— Step 4 — Membuat matriks deteksi untuk analisis kepadatan satwa
Membuat matriks deteksi untuk analisis kepadatan satwa
# Konversi koordinat dari effort# Transfrom dataframe menjadi objek spasialeffort_sf <-st_as_sf(effort, coords =c("Longitude", "Latitude"), crs =4326)# Konversi koordinat dan menambahkan ke dalam dataframeeffort_sf_utm <-st_transform(effort_sf, crs =32617) effort$utm_x <-st_coordinates(effort_sf_utm)[, 1]effort$utm_y <-st_coordinates(effort_sf_utm)[, 2]
Membuat matriks deteksi untuk analisis kepadatan satwa
# Melihat ringkasan matriks deteksi individusummary(sdh)
Object class capthist
Detector type proximity
Detector number 14
Average spacing 492.4891 m
x-range 744684.2 749726.4 m
y-range 4307702 4309435 m
Usage range by occasion
1 2 3 4 5 6 7
min 4.5 5 1.5 0 0 0 0.0
max 4.5 5 5.0 5 5 5 4.5
Counts by occasion
1 2 3 4 5 6 7 Total
n 1 2 0 2 1 0 0 6
u 1 2 0 0 0 0 0 3
f 1 1 1 0 0 0 0 3
M(t+1) 1 3 3 3 3 3 3 3
losses 0 0 0 0 0 0 0 0
detections 1 3 0 2 1 0 0 7
detectors visited 1 3 0 1 1 0 0 6
detectors used 14 14 14 11 10 3 2 68
# Melihat plot pergerakan individuplot(sdh, track=T)
# Membuat buffermy_traps <-traps(sdh)my_mask <-make.mask(my_traps,buffer =2500,spacing =500, type ="trapbuffer")# Melihat buffer dengan lokasi kamera plot(my_mask)plot(my_traps, add=T)
Terima Kasih!
🙏🏼 Mohon beritahu saya penilaian anda terkait materi ini melalui survei singkat ini;
Ridout, M. S., and M. Linkie. 2009. “Estimating Overlap of Daily Activity Patterns from Camera Trap Data.”Journal of Agricultural, Biological, and Environmental Statistics 14 (3): 322–37. https://doi.org/10.1198/jabes.2009.08038.