Exif extractor - codeport/scala GitHub Wiki
EXIF(Exchangeable image file format) ์ถ์ถํ๊ธฐ
Scala๋ฅผ ์ด์ฉํด ๋ค์์ ์ด๋ฏธ์ง ํ์ผ์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด ๋ณด์.
์ค๋น๋ฌผ
- Eclipse๋ก scala ํ๋ก์ ํธ ์ํ ์ค๋น(Scala ๋ฒ์ 2.9์ด์)
- 23์ฅ์ ๋ด์ฉ์ ์ฝ๊ณ ์์ ์ด ์์ฑํ ๊ฐ์ฒด๋ฅผ for๋ฌธ์์ generator๋ก ํ์ฉํ ์ ์๋๋ก ์๋ จํจ
- Collection filter, map, flatMap ๋ฉ์๋ ์ฌ์ฉ๋ฒ
- Stream์ ๋ํ ๊ฐ๋ฒผ์ด ์ฌ์ ์ง์
- ์งํ ์ ์ฒ๋ฆฌ ๋์ ์ ๋ณด๊ฐ Stream๊ฐ์ฒด์ ๋ด๊ฒจ์ ธ ์ ๋ฌ๋ ์์
EXIF๋?
- Wikipedia์ link ์ฐธ๊ณ
EXIF ์ ๋ณด ํ์ธ ๋ฐฉ๋ฒ
- ํน์ ์ด๋ฏธ์ง์ EXIF ์ ๋ณด๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, picasa, flickr, chrome extension๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํ์ธ ๊ฐ๋ฅ
- ์์์ EXIF ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ผ๋ฉด ๋จ
- ์ฐธ๊ณ ๋ก ํฌ๋กฌ ํ์ฅ๋ ์์(์ ์ฉํ์ง๋ ๋ชจ๋ฅด๊ฒ ์)
- ํ์ธํ๋ฉด ์ ์ ์๋ฏ์ด ์์ฃผ ๋ง์ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฏ๋ก ์ ๋ณํ์ฌ ์์ ํ ๊ฒ
์์ ์งํ ์์
-
๋์ ํ์ผ ์ถ์ถ
-
์ค์ ๋์์ console์์ ์ํ
-
sys.process๋ฅผ ํ์ฉํด ์ฒ๋ฆฌ ๋์ ํ์ผ๋ช ์ ๊ตฌํจ
-
import sys.process._
-
implicit type conversion์ ์ด์ฉํ์ฌ ๋ฌธ์์ด์
!
์ถ๊ฐ"ls -al" ! "ls ~/images" lines_!
-
-
jpg ๋๋ png ์ด๋ฏธ์ง ํ์ผ ์ฐพ๊ธฐ(xnix)
find . -type f -name "*.jpg" -or -name "*.png"
-
์์ : ์ผ์ ํฌ๊ธฐ(100kb) ์ดํ์ png ํ์ผ๋ง ๊ณจ๋ผ๋ด๊ธฐ
"find /Users/nephilim/images -type f -name *.png" .lines_! .filter( new java.io.File(_).length < 100 * 1000 )
-
-
๋์ ํ์ผ์ exif ์ ๋ณด ์ถ๋ ฅ
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ: image์์ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ metadata extractor ์ฌ์ฉ
-
metadata extractor ์ฌ์ดํธ์ GettingStarted์ ๋ด์ฉ๋ง์ผ๋ก๋ ์งํ ๊ฐ๋ฅํจ
JpegMetadataReader.readMetadata(file)
-
SBT๋ฅผ ํตํ ์์กด์ฑ ๊ด๋ฆฌ: URL์ ํตํ ์ง์ ๋ค์ด๋ก๋
-
build.sbt์ ๋ค์์ ์ถ๊ฐํ๋ค
libraryDependencies += "metadata-extractor" % "metadata-extractor" % "2.6.1" from "file://lib/metadata-extractor-2.6.1.jar"
-
์ ํํ ํํ >> generator๋ฅผ ํ์ฉํด for ๋ฃจํ๋ฅผ ๋๋ฆฌ๋ฉด metadata๊ฐ ์ถ๋ ฅ๋๋๋ก ํ๋ค
-
-
์ํ๋ ์ ๋ณด๋ฅผ ์ถ์ถ
-
Metadata์ ์ ๋ณด๋ group์ธ Directory์ Directory์ ์ํ Tag๊ฐ ์๋ค.
-
๋ค์์() 2๊ฐ์ Directory์ ๊ทธ์ ์ํ Tag์ ์์์
[GPS] GPS Version ID - 2.200 [GPS] GPS Latitude Ref - N [GPS] GPS Latitude - 37.0?? 32.0' 5.399999999993383" [GPS] GPS Longitude Ref - E [GPS] GPS Longitude - 126.0?? 59.0' 39.59999999998786" [GPS] GPS Time-Stamp - 23:45:3700 UTC [Exif Thumbnail] Thumbnail Compression - JPEG (old-style) [Exif Thumbnail] X Resolution - 72 dots per inch [Exif Thumbnail] Y Resolution - 72 dots per inch [Exif Thumbnail] Resolution Unit - Inch [Exif Thumbnail] Thumbnail Offset - 952 bytes [Exif Thumbnail] Thumbnail Length - 9599 bytes
-
์: ์ดฌ์ ์๊ฐ, GPS Directory ์ ๋ณด๋ง ์ถ์ถ
-
์ฃผ์ metadata-extractor ์ฌ์ฉ์ ํ์ผ ๊ฒฝ๋ก๋ canonical path๋ก ์ฌ์ฉํ ๊ฒ(home dir์ ~๋ก ํ๊ธฐํ๋ฉด ๋์ํ์ง ์์)
-
Sample Site ๋ฅผ ์ฐธ๊ณ ํด์ ๊ฒฐ์ ํ๋ฉด ๋๋ค.
-
-
์ํ๋ ์ ๋ณด ์ถ์ถ ๋ถ๋ถ์ generator๋ก refactoring
-
extract metadata๋ฅผ ์ด์ฉํ ์ ๋ณด ์ถ์ถ์ ์์(GPS)
def extractGpsPos(metadata:Metadata):(String,String) = { import scala.collection.JavaConversions._ val directory = metadata.getDirectory(classOf[GpsDirectory]) val descriptor = new GpsDescriptor(directory) (descriptor.getGpsLatitudeDescription, descriptor.getGpsLongitudeDescription) }
-
map ๋ง๋ค๊ธฐ
- ์ง์ ์์ฑํ๊ธฐ ํน์
- ๋ง๋งํ collection์ ์์
-
meta-extractor ์ฌ์ดํธ์ ์์ํ๊ธฐ ํ์ด์ง ๋ฅผ ์ฐธ๊ณ ํ๋ค.
-
ํน์ ํด๋์ EXIF ์ ๋ณด๋ฅผ ์ฝ๋ ํด๋์ค ์์ฑ ํ for ๋ฌธ์ ์ด์ฉํด ์ถ์ถํ๋ค.
-
flatMap, filter๋ ์ต์
-
-
visualize(์ต์ )
- ์ถ์ถํ ์ ๋ณด๋ฅผ ์์ฉํ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋๋ค.
- ํ์ฉ ์: GPS Visualizer ํ์ธ
์น๋ถ
- generator ์์ฑ๋
- ์ถ์ถํ gps ์ ๋ณด ํ์ฉ๋
์ถ๊ฐ ๊ณต์
-
์นด๋ฉ๋ผ๋ก ์ฐ์ ์ฌ์ง(exif๊ฐ ์๋ ์ฌ์ง)์ ์ฌ๋ฟ๊ฐ์ง๊ณ ์ฌ ๊ฒ
- ๊ฐ์ 10๊ฐ ์ด์
- ์ฌ์ง ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ ํ๋ก๊ทธ๋จ(mac์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ, ์ด๋ฏธ์ง ๋ทฐ์ด...)์ ์ด์ฉํด ์ด๋ค ์ ๋ณด๊ฐ ์๋์ง ํ์ธ.
-
์ด๋ค ์ ๋ณด๋ฅผ ์ถ์ถํด์ ํ์ฉํ ์ง ๋ฏธ๋ฆฌ ์ ํด ์ค๋ฉด ์ข์
- gps์ ๋ณด ๋ฑ