Created
December 13, 2014 20:17
-
-
Save iszlai/c09e8b836d8b313d616d to your computer and use it in GitHub Desktop.
Akka ETL load a folder full of images and save int arrrays to file line by line
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.strike.etl | |
import java.io.FileWriter | |
import akka.actor.Actor | |
import com.typesafe.config.ConfigFactory | |
import org.slf4j.LoggerFactory | |
/** | |
* Created by Lehel on 12/13/2014. | |
*/ | |
class FileAppendingActor extends Actor { | |
def logger = LoggerFactory.getLogger(this.getClass) | |
val conf = ConfigFactory.load() | |
val RESULTFILE=conf.getString("saveToURL") | |
val fw = new FileWriter(RESULTFILE, true) | |
logger.info("FileAppenderWorker created") | |
def receive = { | |
case TextToAppend(message) => { | |
logger.trace(s"received:{$message}") | |
fw.write(message + System.lineSeparator) | |
} | |
} | |
override def postStop() = { | |
super.postStop() | |
fw.close() | |
logger.info("FileAppenderWorker shutting down, resultData.csv closed") | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.strike.etl | |
import java.awt.image.BufferedImage | |
import akka.actor.{ActorRef, Actor} | |
import org.slf4j.LoggerFactory | |
/** | |
* Created by Lehel on 12/13/2014. | |
*/ | |
case class ImageToProcess(img: BufferedImage) | |
case class TextToAppend(line: String) | |
class ImageMappingActor(fileAppender: ActorRef) extends Actor { | |
def logger = LoggerFactory.getLogger(this.getClass) | |
def extractString(img: BufferedImage): String = { | |
val height = img.getHeight; | |
val width = img.getWidth; | |
val arr = img.getRGB(0, 0, width, height, null, 0, width); | |
arr.mkString(",") | |
} | |
def receive = { | |
case ImageToProcess(message) => { | |
val result = extractString(message) | |
fileAppender ! new TextToAppend(result) | |
logger.trace("msg extracted: " + result) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.strike.etl | |
import java.awt.FlowLayout | |
import java.awt.image.BufferedImage | |
import java.io.File | |
import javax.imageio.ImageIO | |
import javax.swing.{JLabel, JFrame, ImageIcon} | |
import akka.actor.{Inbox, Props, ActorSystem} | |
import com.typesafe.config.ConfigFactory | |
import org.slf4j.LoggerFactory | |
/** | |
* Created by Lehel on 12/12/2014. | |
*/ | |
object LoadImages { | |
def main(args: Array[String]) { | |
def logger = LoggerFactory.getLogger(this.getClass) | |
val conf = ConfigFactory.load() | |
val loadURL=conf.getString("loadFromURL") | |
logger.info("Startup") | |
// Create the 'helloakka' actor system | |
val system = ActorSystem("actorSystem") | |
val fileAppendingActor = system.actorOf(Props[FileAppendingActor], "fileAppendingActor") | |
val imageMapperWorker = system.actorOf(Props(new ImageMappingActor(fileAppendingActor))) | |
// Create an "actor-in-a-box" | |
val inbox = Inbox.create(system) | |
var nrOfFile = 0; | |
for (file <- new File(loadURL).listFiles) { | |
logger.info("read in:" + file.getName) | |
val img = ImageIO.read(file) | |
inbox.send(imageMapperWorker, new ImageToProcess(img)) | |
nrOfFile += 1 | |
} | |
logger.info(s"Processed $nrOfFile nr.files") | |
system.shutdown() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment