diff --git a/.gitignore b/.gitignore index 3761b90..248542a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /build /out /.gradle -.idea -outputs/ src/main/resources/Outputs/ +src/main/resources/Natives/ +src/main/resources/OCR/ \ No newline at end of file diff --git a/build.gradle b/build.gradle index 977468b..165bfb0 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ buildscript { } apply plugin: 'java' -// Uncomment the following plugin to test for unused libraries +// Uncomment the following plugin to test for unused libraries (gradle analyze) //apply plugin: 'ca.cutterslade.analyze' apply plugin: 'idea' apply plugin: 'application' @@ -37,30 +37,30 @@ repositories{ mavenCentral() } -jar { - manifest { - attributes( - 'Main-Class': 'Main', - ) - } -} - -task fatJar(type: Jar) { - manifest.from jar.manifest - classifier = 'all' - from { - configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } - } { - exclude "META-INF/*.SF" - exclude "META-INF/*.DSA" - exclude "META-INF/*.RSA" - } - with jar -} - -artifacts { - archives fatJar -} +//jar { +// manifest { +// attributes( +// 'Main-Class': 'Main', +// ) +// } +//} +// +//task fatJar(type: Jar) { +// manifest.from jar.manifest +// classifier = 'all' +// from { +// configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } +// } { +// exclude "META-INF/*.SF" +// exclude "META-INF/*.DSA" +// exclude "META-INF/*.RSA" +// } +// with jar +//} +// +//artifacts { +// archives fatJar +//} ext { @@ -83,8 +83,6 @@ ext { } - - dependencies { // Local Libraries diff --git a/src/main/java/Entities/ApplicationPaths.java b/src/main/java/Entities/ApplicationPaths.java index 20ec685..4819e03 100644 --- a/src/main/java/Entities/ApplicationPaths.java +++ b/src/main/java/Entities/ApplicationPaths.java @@ -5,20 +5,19 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; public class ApplicationPaths { public static Caller CALLER; - public static String USER_DIR = ""; - public static String IDE_DIR = ""; - public static String RESOURCES; + public static String USER_DIR; public static String RESOURCES_NATIVES; public static String RESOURCES_OCR; public static String RESOURCES_OCR_TESSDATA; public static String RESOURCES_OCR_LANGUAGES; - public static String FOLDER_PATH; + public static String RESOURCES_OUTPUTS; public static String UNIQUE_FOLDER_NAME; - public static String FILE_SEPERATOR; /*** * Sets the application's directory paths differently whether it is a JAR file calling or an IDE @@ -26,49 +25,31 @@ public class ApplicationPaths public static void setApplicationPaths() { final File jarFile = new File(ApplicationPaths.class.getProtectionDomain().getCodeSource().getLocation().getPath()); - if(jarFile.isFile()) { - if (FilenameUtils.getExtension(jarFile.getPath()).equals("jar")){ - CALLER = Caller.JAR; - USER_DIR = jarFile.getParent(); - } - - RESOURCES = USER_DIR; - RESOURCES_NATIVES = USER_DIR + FILE_SEPERATOR + "Natives"; - RESOURCES_OCR = USER_DIR + FILE_SEPERATOR + "OCR"; - RESOURCES_OCR_TESSDATA = USER_DIR + FILE_SEPERATOR + "OCR" + FILE_SEPERATOR + "tessdata"; - RESOURCES_OCR_LANGUAGES = USER_DIR + FILE_SEPERATOR + "OCR" + FILE_SEPERATOR + "languages" + FILE_SEPERATOR; - FOLDER_PATH = USER_DIR + FILE_SEPERATOR + "Outputs"; - + CALLER = Caller.JAR; + USER_DIR = jarFile.getParentFile().getPath(); } else { CALLER = Caller.IDE; try { - IDE_DIR = new File(".").getCanonicalPath() + FILE_SEPERATOR + "src" + - FILE_SEPERATOR + "main" + FILE_SEPERATOR + "resources" + FILE_SEPERATOR; - RESOURCES = IDE_DIR; - RESOURCES_NATIVES = IDE_DIR + "Natives"; - RESOURCES_OCR = IDE_DIR + "OCR"; - RESOURCES_OCR_TESSDATA = IDE_DIR + "OCR" + FILE_SEPERATOR + "tessdata"; - RESOURCES_OCR_LANGUAGES = "src/main/resources/OCR/languages/"; - FOLDER_PATH = "src" + FILE_SEPERATOR + "main" + FILE_SEPERATOR + - "resources" + FILE_SEPERATOR + "Outputs"; + USER_DIR = Paths.get(new File(".").getCanonicalPath(),"src","main","resources").toFile().getPath(); } catch (IOException e) { System.out.println("Couldn't create IDE directories"); Platform.exit(); System.exit(1); } } + RESOURCES_NATIVES = Paths.get(USER_DIR, "Natives").toAbsolutePath().toString(); + RESOURCES_OCR = Paths.get(USER_DIR, "OCR").toAbsolutePath().toString(); + RESOURCES_OCR_TESSDATA = Paths.get(USER_DIR, "OCR","tessdata").toAbsolutePath().toString(); + RESOURCES_OCR_LANGUAGES = Paths.get(USER_DIR, "OCR","languages").toAbsolutePath().toString(); + RESOURCES_OUTPUTS = Paths.get(USER_DIR, "Outputs").toAbsolutePath().toString(); } + // TODO maybe delete this - not necessary public static void checkCaller(){ switch (CALLER){ - case EXE: - Controllers.getLogController().logTextArea.appendText("EXE called\n"); - Controllers.getLogController().logTextArea.appendText("USER_DIR: " + USER_DIR + "\n"); - break; case JAR: Controllers.getLogController().logTextArea.appendText("JAR called\n"); - Controllers.getLogController().logTextArea.appendText("USER_DIR: " + USER_DIR + "\n"); break; case IDE: Controllers.getLogController().logTextArea.appendText("IDE called\n"); diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 3ce71cc..3f2ebb6 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -15,16 +15,13 @@ import org.opencv.core.Mat; import org.opencv.core.Scalar; +import java.lang.reflect.Field; + public class Main extends Application { @Override public void start(Stage stage) throws Exception { - if (SystemUtils.IS_OS_WINDOWS){ - ApplicationPaths.FILE_SEPERATOR = "\\"; - } else if (SystemUtils.IS_OS_LINUX){ - ApplicationPaths.FILE_SEPERATOR = "/"; - } FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("Views/main.fxml")); Parent root = loader.load(); stage.setTitle("VideoText Extractor"); @@ -37,9 +34,7 @@ public void start(Stage stage) throws Exception MainController.setMainStage(stage); FileProcessor.loadLibraries(); - //testOpenCV(); - // Terminating all Threads when the application is closed. ? stage.setOnCloseRequest(e -> { System.exit(0); }); @@ -49,11 +44,5 @@ public static void main(String[] args) { launch(args); } - private void testOpenCV() { - System.out.println("Welcome to OpenCV " + Core.VERSION); - Controllers.getLogController().logTextArea.appendText("Welcome to OpenCV " + Core.VERSION + "\n"); - Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0)); - System.out.println("OpenCV Mat: " + m); - Controllers.getLogController().logTextArea.appendText("OpenCV Mat: " + m + "\n"); - } + } diff --git a/src/main/java/Processors/FileProcessor.java b/src/main/java/Processors/FileProcessor.java index 3e4075c..c693a16 100644 --- a/src/main/java/Processors/FileProcessor.java +++ b/src/main/java/Processors/FileProcessor.java @@ -1,6 +1,7 @@ package Processors; import Entities.ApplicationPaths; +import Entities.Caller; import Entities.Controllers; import ViewControllers.MainController; import javafx.application.Platform; @@ -10,8 +11,11 @@ import javafx.stage.Stage; import org.apache.commons.lang3.SystemUtils; import org.jetbrains.annotations.Contract; +import org.opencv.core.Core; + import java.io.File; import java.io.IOException; +import java.lang.reflect.Field; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; @@ -63,18 +67,12 @@ public static boolean createDirectories(File chosenFile) // Generating unique name of current video file operation ApplicationPaths.UNIQUE_FOLDER_NAME = chosenFile.getName().replace(".mp4","")+" "+ new Date().toString().replace(":","-"); - - // Creating paths for write operations - Files.createDirectories(Paths.get(ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR - + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + "Text Blocks")); - Files.createDirectories(Paths.get(ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR - + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + "Painted Frames")); - Files.createDirectories(Paths.get(ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR - + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR +"Steps")); - Files.createDirectories(Paths.get(ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR - + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + "Video")); - Files.createDirectories(Paths.get(ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR - + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + "OCR Images")); + // Creating paths for application outputs + Files.createDirectories(Paths.get(ApplicationPaths.RESOURCES_OUTPUTS,ApplicationPaths.UNIQUE_FOLDER_NAME, "Text Blocks")); + Files.createDirectories(Paths.get(ApplicationPaths.RESOURCES_OUTPUTS,"Painted Frames")); + Files.createDirectories(Paths.get(ApplicationPaths.RESOURCES_OUTPUTS,ApplicationPaths.UNIQUE_FOLDER_NAME, "Steps")); + Files.createDirectories(Paths.get(ApplicationPaths.RESOURCES_OUTPUTS,ApplicationPaths.UNIQUE_FOLDER_NAME,"Video")); + Files.createDirectories(Paths.get(ApplicationPaths.RESOURCES_OUTPUTS,ApplicationPaths.UNIQUE_FOLDER_NAME, "OCR Images")); return true; } catch (RuntimeException | IOException ex) { @@ -107,28 +105,28 @@ public static File showFileDialog() //TODO load natives cross platform public static void loadLibraries() throws IOException, URISyntaxException { - String path = ApplicationPaths.RESOURCES_NATIVES; + setLibraryPath(); try { if(SystemUtils.IS_OS_WINDOWS) { int bit = Integer.parseInt(System.getProperty("sun.arch.data.model")); if(bit == 32){ - System.load(path + "\\opencv_java320.dll"); + System.loadLibrary("opencv_320_32"); Controllers.getLogController().logTextArea.appendText("Loaded OpenCV for Windows 32 bit\n"); - System.load(path + "\\openh264-1.7.0-win32.dll"); + System.loadLibrary("openh264-1.6.0-win32msvc"); Controllers.getLogController().logTextArea.appendText("Loaded OpenH264 for Windows 32 bit\n"); } else if (bit == 64){ - System.load(path + "\\opencv_java320.dll"); + System.loadLibrary("opencv_320_64"); Controllers.getLogController().logTextArea.appendText("Loaded OpenCV for Windows 64 bit\n"); - System.load(path + "\\openh264-1.7.0-win64.dll"); + System.loadLibrary("openh264-1.6.0-win64msvc"); Controllers.getLogController().logTextArea.appendText("Loaded OpenH264 for Windows 64 bit\n"); } else{ Controllers.getLogController().logTextArea.appendText("Unknown Windows bit - trying with 32"); - System.load(path + "\\opencv_java320.dll"); + System.loadLibrary("opencv_320_32"); Controllers.getLogController().logTextArea.appendText("Loaded OpenCV for Windows 32 bit\n"); - System.load(path + "\\openh264-1.7.0-win32.dll"); + System.loadLibrary("openh264-1.6.0-win32msvc"); Controllers.getLogController().logTextArea.appendText("Loaded OpenH264 for Windows 32 bit\n"); } } @@ -138,23 +136,17 @@ else if(SystemUtils.IS_OS_MAC){ else if(SystemUtils.IS_OS_LINUX){ int bit = Integer.parseInt(System.getProperty("sun.arch.data.model")); if (bit == 32){ - System.load(path + "/libopencv_java320.so"); - Controllers.getLogController().logTextArea.appendText("Loaded OpenCV for Linux 32 bit\n"); - System.load(path + "/libopenh264-1.7.0-linux32.4.so"); - Controllers.getLogController().logTextArea.appendText("Loaded OpenH264 for Linux 32 bit\n"); + Controllers.getLogController().logTextArea.appendText("OS not supported yet\n"); } else if (bit == 64){ - System.load(path + "/libopencv_java320.so"); + System.loadLibrary("opencv_320_64"); Controllers.getLogController().logTextArea.appendText("Loaded OpenCV for Linux 64 bit\n"); - System.load(path + "/libopenh264-1.7.0-linux64.4.so"); + System.loadLibrary("openh264-1.6.0-linux64.3"); Controllers.getLogController().logTextArea.appendText("Loaded OpenH264 for Linux 64 bit\n"); } else { Controllers.getLogController().logTextArea.appendText("Unknown Linux bit - trying with 32\n"); - System.load(path + "/libopencv_java320.so"); - Controllers.getLogController().logTextArea.appendText("Loaded OpenCV for Linux 32 bit\n"); - System.load(path + "/libopenh264-1.7.0-linux32.4.so"); - Controllers.getLogController().logTextArea.appendText("Loaded OpenH264 for Linux 32 bit\n"); + Controllers.getLogController().logTextArea.appendText("OS not supported yet\n"); } } } catch (Throwable e) { @@ -165,4 +157,17 @@ else if (bit == 64){ Platform.exit(); } } + + private static void setLibraryPath() { + try { + System.setProperty("java.library.path", ApplicationPaths.RESOURCES_NATIVES); + Controllers.getLogController().logTextArea.appendText("JavaLibraryPath= " + ApplicationPaths.RESOURCES_NATIVES+"\n"); + Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths"); + fieldSysPath.setAccessible(true); + fieldSysPath.set(null, null); + } catch (Exception ex) { + ex.printStackTrace(); + throw new RuntimeException(ex); + } + } } \ No newline at end of file diff --git a/src/main/java/Processors/ImageWriter.java b/src/main/java/Processors/ImageWriter.java index 74ee5a3..7be6bde 100644 --- a/src/main/java/Processors/ImageWriter.java +++ b/src/main/java/Processors/ImageWriter.java @@ -6,6 +6,8 @@ import org.opencv.core.MatOfInt; import org.opencv.imgcodecs.Imgcodecs; import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; /** * Created by arxa on 26/2/2017. @@ -23,8 +25,8 @@ public class ImageWriter @NotNull public static File writeTextBlock(Mat frame) { - String filePath = ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + - "Text Blocks" + ApplicationPaths.FILE_SEPERATOR + fileCounter++ + ".png"; + String filePath = Paths.get(ApplicationPaths.RESOURCES_OUTPUTS, ApplicationPaths.UNIQUE_FOLDER_NAME, + "Text Blocks", fileCounter++ + ".png").toAbsolutePath().toString(); MatOfInt params = new MatOfInt(Imgcodecs.CV_IMWRITE_PNG_COMPRESSION); Imgcodecs.imwrite(filePath,frame,params); return new File(filePath); @@ -33,8 +35,8 @@ public static File writeTextBlock(Mat frame) public static void writePaintedFrame(Mat frame) { if (!writingEnabled) return; - String filePath = ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + - "Painted Frames" + ApplicationPaths.FILE_SEPERATOR + fileCounter++ + ".png"; + String filePath = Paths.get(ApplicationPaths.RESOURCES_OUTPUTS, ApplicationPaths.UNIQUE_FOLDER_NAME, + "Painted Frames", fileCounter++ + ".png").toAbsolutePath().toString(); MatOfInt params = new MatOfInt(Imgcodecs.CV_IMWRITE_PNG_COMPRESSION); Imgcodecs.imwrite(filePath,frame,params); } @@ -42,8 +44,8 @@ public static void writePaintedFrame(Mat frame) public static void writeOCRImage(Mat frame) { if (!writingEnabled) return; - String filePath = ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + - "OCR Images" + ApplicationPaths.FILE_SEPERATOR + fileCounter++ + ".png"; + String filePath = Paths.get(ApplicationPaths.RESOURCES_OUTPUTS, ApplicationPaths.UNIQUE_FOLDER_NAME, + "OCR Images", fileCounter++ + ".png").toAbsolutePath().toString(); MatOfInt params = new MatOfInt(Imgcodecs.CV_IMWRITE_PNG_COMPRESSION); Imgcodecs.imwrite(filePath,frame,params); } @@ -51,8 +53,8 @@ public static void writeOCRImage(Mat frame) public static void writeStep(Mat frame) { if (!writingEnabled) return; - String filePath = ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR + ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + - "Steps" + ApplicationPaths.FILE_SEPERATOR + fileCounter++ + ".png"; + String filePath = Paths.get(ApplicationPaths.RESOURCES_OUTPUTS, ApplicationPaths.UNIQUE_FOLDER_NAME, + "Steps", fileCounter++ + ".png").toAbsolutePath().toString(); MatOfInt params = new MatOfInt(Imgcodecs.CV_IMWRITE_PNG_COMPRESSION); Imgcodecs.imwrite(filePath,frame,params); } diff --git a/src/main/java/Processors/VideoProcessor.java b/src/main/java/Processors/VideoProcessor.java index 9be5841..c4e8d90 100644 --- a/src/main/java/Processors/VideoProcessor.java +++ b/src/main/java/Processors/VideoProcessor.java @@ -14,8 +14,7 @@ import org.opencv.videoio.VideoWriter; import org.opencv.videoio.Videoio; import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; +import java.nio.file.Paths; import java.util.List; /** @@ -36,9 +35,9 @@ public static void processVideoFile(File videoFile) { OcrProcessor.initUniqueWords(); VideoCapture cap = new VideoCapture(videoFile.getPath()); - VideoWriter videoWriter = new VideoWriter(ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR + - ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR + "Video" + ApplicationPaths.FILE_SEPERATOR + - "video.mp4", VideoWriter.fourcc('X', '2','6','4'), + VideoWriter videoWriter = new VideoWriter(Paths.get(ApplicationPaths.RESOURCES_OUTPUTS, + ApplicationPaths.UNIQUE_FOLDER_NAME, "Video", "video.mp4").toAbsolutePath().toString(), + VideoWriter.fourcc('X', '2','6','4'), cap.get(Videoio.CAP_PROP_FPS), new Size(cap.get(Videoio.CAP_PROP_FRAME_WIDTH), cap.get(Videoio.CAP_PROP_FRAME_HEIGHT)), true); if (cap.isOpened()) diff --git a/src/main/java/ViewControllers/MainController.java b/src/main/java/ViewControllers/MainController.java index b7d15d7..7230a50 100644 --- a/src/main/java/ViewControllers/MainController.java +++ b/src/main/java/ViewControllers/MainController.java @@ -3,10 +3,8 @@ import Entities.ApplicationPaths; import Entities.Controllers; import Processors.FileProcessor; -import Processors.ImageWriter; import Processors.Player; import Processors.VideoProcessor; -import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.scene.Cursor; import javafx.scene.Parent; @@ -21,9 +19,9 @@ import org.apache.commons.io.FilenameUtils; import org.jetbrains.annotations.Contract; -import javax.xml.soap.Text; import java.io.File; import java.io.IOException; +import java.nio.file.Paths; import java.util.Timer; import java.util.TimerTask; @@ -149,9 +147,8 @@ public void initialize() }); playDetected.setOnAction(event -> { - File videoFile = new File(ApplicationPaths.FOLDER_PATH + ApplicationPaths.FILE_SEPERATOR + - ApplicationPaths.UNIQUE_FOLDER_NAME + ApplicationPaths.FILE_SEPERATOR +"Video" + - ApplicationPaths.FILE_SEPERATOR + "video.mp4"); + File videoFile = Paths.get(ApplicationPaths.RESOURCES_OUTPUTS, ApplicationPaths.UNIQUE_FOLDER_NAME, + "Video", "video.mp4").toFile(); if (videoFile.exists()){ Player.playVideo(videoFile); } diff --git a/src/main/java/ViewControllers/SettingsController.java b/src/main/java/ViewControllers/SettingsController.java index 2348ef1..fd5945f 100644 --- a/src/main/java/ViewControllers/SettingsController.java +++ b/src/main/java/ViewControllers/SettingsController.java @@ -64,7 +64,7 @@ public void initialize() throws IOException alert.showAndWait(); }); - Path lang_codes = Paths.get(ApplicationPaths.RESOURCES_OCR_LANGUAGES + "lang_codes.txt"); + Path lang_codes = Paths.get(ApplicationPaths.RESOURCES_OCR_LANGUAGES, "lang_codes.txt"); // Read each line of lang_codes file, parse it, and store the languageName - languageCode information to the map languageMap = new HashMap<>(); diff --git a/src/main/resources/Natives/libopencv_java320.so b/src/main/resources/Natives/libopencv_320_64.so old mode 100755 new mode 100644 similarity index 100% rename from src/main/resources/Natives/libopencv_java320.so rename to src/main/resources/Natives/libopencv_320_64.so diff --git a/src/main/resources/Natives/libopenh264-1.6.0-linux32.3.so b/src/main/resources/Natives/libopenh264-1.6.0-linux32.3.so new file mode 100644 index 0000000..5b2a5f0 Binary files /dev/null and b/src/main/resources/Natives/libopenh264-1.6.0-linux32.3.so differ diff --git a/src/main/resources/Natives/libopenh264-1.6.0-linux64.3.so b/src/main/resources/Natives/libopenh264-1.6.0-linux64.3.so new file mode 100644 index 0000000..becbfc9 Binary files /dev/null and b/src/main/resources/Natives/libopenh264-1.6.0-linux64.3.so differ diff --git a/src/main/resources/Natives/libopenh264-1.6.0-osx32.3.dylib b/src/main/resources/Natives/libopenh264-1.6.0-osx32.3.dylib new file mode 100644 index 0000000..9f13f37 Binary files /dev/null and b/src/main/resources/Natives/libopenh264-1.6.0-osx32.3.dylib differ diff --git a/src/main/resources/Natives/libopenh264-1.6.0-osx64.3.dylib b/src/main/resources/Natives/libopenh264-1.6.0-osx64.3.dylib new file mode 100644 index 0000000..7f1efbb Binary files /dev/null and b/src/main/resources/Natives/libopenh264-1.6.0-osx64.3.dylib differ diff --git a/src/main/resources/Natives/libopenh264-1.7.0-linux32.4.so b/src/main/resources/Natives/libopenh264-1.7.0-linux32.4.so deleted file mode 100644 index 17570d5..0000000 Binary files a/src/main/resources/Natives/libopenh264-1.7.0-linux32.4.so and /dev/null differ diff --git a/src/main/resources/Natives/libopenh264-1.7.0-linux64.4.so b/src/main/resources/Natives/libopenh264-1.7.0-linux64.4.so deleted file mode 100644 index 7395e27..0000000 Binary files a/src/main/resources/Natives/libopenh264-1.7.0-linux64.4.so and /dev/null differ diff --git a/src/main/resources/Natives/opencv_320_32.dll b/src/main/resources/Natives/opencv_320_32.dll new file mode 100644 index 0000000..41ec73a Binary files /dev/null and b/src/main/resources/Natives/opencv_320_32.dll differ diff --git a/src/main/resources/Natives/opencv_java320.dll b/src/main/resources/Natives/opencv_320_64.dll similarity index 100% rename from src/main/resources/Natives/opencv_java320.dll rename to src/main/resources/Natives/opencv_320_64.dll diff --git a/src/main/resources/Natives/opencv_ffmpeg320_64.dll b/src/main/resources/Natives/opencv_ffmpeg320_64.dll new file mode 100644 index 0000000..8a26deb Binary files /dev/null and b/src/main/resources/Natives/opencv_ffmpeg320_64.dll differ diff --git a/src/main/resources/Natives/openh264-1.6.0-win32msvc.dll b/src/main/resources/Natives/openh264-1.6.0-win32msvc.dll new file mode 100644 index 0000000..5afec9e Binary files /dev/null and b/src/main/resources/Natives/openh264-1.6.0-win32msvc.dll differ diff --git a/src/main/resources/Natives/openh264-1.6.0-win64msvc.dll b/src/main/resources/Natives/openh264-1.6.0-win64msvc.dll new file mode 100644 index 0000000..56f06ea Binary files /dev/null and b/src/main/resources/Natives/openh264-1.6.0-win64msvc.dll differ diff --git a/src/main/resources/Natives/openh264-1.7.0-win32.dll b/src/main/resources/Natives/openh264-1.7.0-win32.dll deleted file mode 100644 index da08091..0000000 Binary files a/src/main/resources/Natives/openh264-1.7.0-win32.dll and /dev/null differ diff --git a/src/main/resources/Natives/openh264-1.7.0-win64.dll b/src/main/resources/Natives/openh264-1.7.0-win64.dll deleted file mode 100644 index ba98295..0000000 Binary files a/src/main/resources/Natives/openh264-1.7.0-win64.dll and /dev/null differ