diff --git a/.vs/EKYC/v17/.suo b/.vs/EKYC/v17/.suo new file mode 100644 index 0000000..06152ee Binary files /dev/null and b/.vs/EKYC/v17/.suo differ diff --git a/.vs/EKYC/v17/Browse.VC.db b/.vs/EKYC/v17/Browse.VC.db new file mode 100644 index 0000000..574a26f Binary files /dev/null and b/.vs/EKYC/v17/Browse.VC.db differ diff --git a/.vs/EKYC/v17/ipch/AutoPCH/3dae3c0e7abcb25b/WARP.ipch b/.vs/EKYC/v17/ipch/AutoPCH/3dae3c0e7abcb25b/WARP.ipch new file mode 100644 index 0000000..47f841e Binary files /dev/null and b/.vs/EKYC/v17/ipch/AutoPCH/3dae3c0e7abcb25b/WARP.ipch differ diff --git a/.vs/EKYC/v17/ipch/AutoPCH/9006e8497d374e8/DETECT_CORNER.ipch b/.vs/EKYC/v17/ipch/AutoPCH/9006e8497d374e8/DETECT_CORNER.ipch new file mode 100644 index 0000000..e6be2af Binary files /dev/null and b/.vs/EKYC/v17/ipch/AutoPCH/9006e8497d374e8/DETECT_CORNER.ipch differ diff --git a/.vs/EKYC/v17/ipch/AutoPCH/986870aa21a34469/EXTRACT_LONG.ipch b/.vs/EKYC/v17/ipch/AutoPCH/986870aa21a34469/EXTRACT_LONG.ipch new file mode 100644 index 0000000..85c2292 Binary files /dev/null and b/.vs/EKYC/v17/ipch/AutoPCH/986870aa21a34469/EXTRACT_LONG.ipch differ diff --git a/.vs/EKYC/v17/ipch/AutoPCH/a6271da328bf20c9/SQUARES.ipch b/.vs/EKYC/v17/ipch/AutoPCH/a6271da328bf20c9/SQUARES.ipch new file mode 100644 index 0000000..eebcc88 Binary files /dev/null and b/.vs/EKYC/v17/ipch/AutoPCH/a6271da328bf20c9/SQUARES.ipch differ diff --git a/.vs/EKYC/v17/ipch/AutoPCH/f3a80539f82506d4/MAIN.ipch b/.vs/EKYC/v17/ipch/AutoPCH/f3a80539f82506d4/MAIN.ipch new file mode 100644 index 0000000..7c48c94 Binary files /dev/null and b/.vs/EKYC/v17/ipch/AutoPCH/f3a80539f82506d4/MAIN.ipch differ diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..0cf5ea5 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "No Configurations" +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..f1eb390 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,8 @@ +{ + "ExpandedNodes": [ + "", + "\\EKYC" + ], + "SelectedNode": "\\EKYC.sln", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000..d586af7 Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/EKYC.sln b/EKYC.sln new file mode 100644 index 0000000..d58bf41 --- /dev/null +++ b/EKYC.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32421.90 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EKYC", "EKYC\EKYC.vcxproj", "{00FC090A-A417-4103-B6A4-ADA044F93FC8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Debug|x64.ActiveCfg = Debug|x64 + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Debug|x64.Build.0 = Debug|x64 + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Debug|x86.ActiveCfg = Debug|Win32 + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Debug|x86.Build.0 = Debug|Win32 + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Release|x64.ActiveCfg = Release|x64 + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Release|x64.Build.0 = Release|x64 + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Release|x86.ActiveCfg = Release|Win32 + {00FC090A-A417-4103-B6A4-ADA044F93FC8}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0F1378C1-799B-4A10-B662-D5BDB9E95ABA} + EndGlobalSection +EndGlobal diff --git a/EKYC/EKYC.vcxproj b/EKYC/EKYC.vcxproj new file mode 100644 index 0000000..2a5da63 --- /dev/null +++ b/EKYC/EKYC.vcxproj @@ -0,0 +1,153 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {00fc090a-a417-4103-b6a4-ada044f93fc8} + EKYC + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + D:\openCV\opencv\build\include;D:\1\20212\KTLT\vcpkg\installed\x64-windows\include\tesseract;D:\1\20212\KTLT\vcpkg\installed\x64-windows\include;D:\1\20212\KTLT\vcpkg\installed\x64-windows\include\leptonica;%(AdditionalIncludeDirectories) + + + Console + true + true + true + D:\1\20212\KTLT\vcpkg\installed\x64-windows\lib;D:\openCV\opencv\build\x64\vc15\lib;%(AdditionalLibraryDirectories) + opencv_world455.lib;archive.lib;bz2.lib;charset.lib;gif.lib;iconv.lib;jpeg.lib;leptonica-1.82.0.lib;libcrypto.lib;libpng16.lib;libssl.lib;libxml2.lib;lz4.lib;lzma.lib;openjp2.lib;tesseract41.lib;tiff.lib;turbojpeg.lib;webp.lib;webpdecoder.lib;webpdemux.lib;webpmux.lib;zlib.lib;zstd.lib;%(AdditionalDependencies) + + + + + D:\1\20212\KTLT\vcpkg\installed\x64-windows\include\tesseract;D:\1\20212\KTLT\vcpkg\installed\x64-windows\include;D:\1\20212\KTLT\vcpkg\installed\x64-windows\include\leptonica;%(AdditionalIncludeDirectories) + false + + + + + + \ No newline at end of file diff --git a/EKYC/EKYC.vcxproj.filters b/EKYC/EKYC.vcxproj.filters new file mode 100644 index 0000000..943a77e --- /dev/null +++ b/EKYC/EKYC.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/EKYC/EKYC.vcxproj.user b/EKYC/EKYC.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/EKYC/EKYC.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/EKYC/extract_information.cpp b/EKYC/extract_information.cpp new file mode 100644 index 0000000..e9df7ed --- /dev/null +++ b/EKYC/extract_information.cpp @@ -0,0 +1,148 @@ +#include "opencv2/highgui.hpp" +#include "opencv2/imgproc.hpp" +#include +#include +#include +#include +#include +using namespace cv; +using namespace std; + +RNG rng(12345); + +int getMaxAreaContourId(vector > contours) { + double maxArea = 0; + int maxAreaContourId = -1; + for (int j = 0; j < contours.size(); j++) { + double newArea = cv::contourArea(contours.at(j)); + if (newArea > maxArea) { + maxArea = newArea; + maxAreaContourId = j; + } + } + return maxAreaContourId; +} + +std::vector detectLetters(cv::Mat img) +{ + // Find contours + std::vector boundRect; + cv::Mat img_gray, img_sobel, img_threshold, element; + cvtColor(img, img_gray, COLOR_BGR2GRAY); + cv::Sobel(img_gray, img_sobel, CV_8U, 1, 0, 3, 1, 0, cv::BORDER_DEFAULT); + cv::threshold(img_sobel, img_threshold, 0, 255, THRESH_OTSU + THRESH_BINARY); + element = getStructuringElement(cv::MORPH_RECT, cv::Size(20, 7)); + cv::morphologyEx(img_threshold, img_threshold, MORPH_GRADIENT, element); + std::vector< std::vector< cv::Point> > contours; + cv::findContours(img_threshold, contours, 0, 1); + std::vector > contours_poly(contours.size()); + for (int i = 0; i < contours.size(); i++) + if (contours[i].size() > 100) + { + cv::approxPolyDP(cv::Mat(contours[i]), contours_poly[i], 3, true); + cv::Rect appRect(boundingRect(cv::Mat(contours_poly[i]))); + if (appRect.width > appRect.height) + boundRect.push_back(appRect); + } + return boundRect; +} + +string trim(const string& str) +{ + size_t first = str.find_first_not_of(' '); + if (string::npos == first) + { + return str; + } + size_t last = str.find_last_not_of(' '); + return str.substr(first, (last - first + 1)); +} + +int main() { + Mat img, img_resized, img_original, img_gray, img_canny, edged, hstack; + img = imread("D:/AI_PHOTO/data/student3.jpg"); + //img_original = img.copyTo(); + + resize(img, img_resized, Size(), 0.5, 0.5); + + + cvtColor(img_resized, img_original, COLOR_BGR2GRAY); + bilateralFilter(img_original, img_gray, 20, 30, 30); + Canny(img_gray, edged, 10, 20); + + hconcat(edged, img_gray, hstack); + + + // Find contour for image + vector > contours; + vector hierarchy; + findContours(edged, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE); + + int index = getMaxAreaContourId(contours); + + Scalar color = Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)); + drawContours(img_resized, contours, (int)index, color, 2, LINE_8, hierarchy, 0); + + // Find four corner points + vector approx; + approxPolyDP(contours[index], approx, 30, true); + auto mean = cv::mean(approx); + vector bottomCorners; + vector topCorners; + + for (auto p : approx) + { + if (p.y > mean[1]) bottomCorners.push_back(p); + if (p.y < mean[1]) topCorners.push_back(p); + } + + circle(img_resized, topCorners[1], 5, color, 10); + + // Use perspective transformation to rotate cropped image + Mat output; + Point2f Poly2[4] = { + topCorners[0], + topCorners[1], + bottomCorners[0], + bottomCorners[1], + }; + + Point2f Points[4] = { + cv::Point2f(0,0), + cv::Point2f(432,0), + cv::Point2f(0,576), + cv::Point2f(432,576), + }; + + cv::Mat Matrix = cv::getPerspectiveTransform(Poly2, Points); + + cv::warpPerspective(img_resized, output, Matrix, cv::Size(432, 576)); + + //OCR time + vector letterBBoxes1 = detectLetters(output); + + tesseract::TessBaseAPI* ocr = new tesseract::TessBaseAPI(); + ocr->Init("C:\\Program Files\\Tesseract-OCR\\tessdata", "eng", tesseract::OEM_LSTM_ONLY); + ocr->SetPageSegMode(tesseract::PSM_AUTO); + + for (int i = 0; i < letterBBoxes1.size(); i++) { + + rectangle(output, letterBBoxes1[i], cv::Scalar(0, 255, 0), 1, 1, 0); + Mat cropped_image = output(letterBBoxes1[i]); + ocr->SetImage(cropped_image.data, cropped_image.cols, cropped_image.rows, 3, cropped_image.step); + string outText = string(ocr->GetUTF8Text()); + outText.erase(std::remove(outText.begin(), outText.end(), '\n'), outText.end()); + putText(output, trim(outText), cv::Point(letterBBoxes1[i].x, letterBBoxes1[i].y - 10), cv::FONT_HERSHEY_DUPLEX, 0.5, cv::Scalar(255, 255, 255), 1, false); + } + + + ocr->End(); + + imshow("origin", img_resized); + + imshow("Output", output); + imwrite("D:/AI_PHOTOS/data/student3.jpg", output); + //imshow("gray and edged", hstack); + waitKey(0); + destroyAllWindows(); +} diff --git a/EKYC/x64/Release/EKYC.exe.recipe b/EKYC/x64/Release/EKYC.exe.recipe new file mode 100644 index 0000000..b4a97d1 --- /dev/null +++ b/EKYC/x64/Release/EKYC.exe.recipe @@ -0,0 +1,11 @@ + + + + + D:\1\20212\KTLT\EKYC\x64\Release\EKYC.exe + + + + + + \ No newline at end of file diff --git a/EKYC/x64/Release/EKYC.iobj b/EKYC/x64/Release/EKYC.iobj new file mode 100644 index 0000000..3556130 Binary files /dev/null and b/EKYC/x64/Release/EKYC.iobj differ diff --git a/EKYC/x64/Release/EKYC.ipdb b/EKYC/x64/Release/EKYC.ipdb new file mode 100644 index 0000000..4aa9476 Binary files /dev/null and b/EKYC/x64/Release/EKYC.ipdb differ diff --git a/EKYC/x64/Release/EKYC.log b/EKYC/x64/Release/EKYC.log new file mode 100644 index 0000000..543f399 --- /dev/null +++ b/EKYC/x64/Release/EKYC.log @@ -0,0 +1,8 @@ + extract_long.cpp +D:\1\20212\KTLT\EKYC\EKYC\extract_long.cpp(132,98): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data + Generating code + 1 of 350 functions ( 0.3%) were compiled, the rest were copied from previous compilation. + 0 functions were new in current compilation + 0 functions had inline decision re-evaluated but remain unchanged + Finished generating code + EKYC.vcxproj -> D:\1\20212\KTLT\EKYC\x64\Release\EKYC.exe diff --git a/EKYC/x64/Release/EKYC.tlog/CL.command.1.tlog b/EKYC/x64/Release/EKYC.tlog/CL.command.1.tlog new file mode 100644 index 0000000..fadfc81 Binary files /dev/null and b/EKYC/x64/Release/EKYC.tlog/CL.command.1.tlog differ diff --git a/EKYC/x64/Release/EKYC.tlog/CL.read.1.tlog b/EKYC/x64/Release/EKYC.tlog/CL.read.1.tlog new file mode 100644 index 0000000..0a5b410 Binary files /dev/null and b/EKYC/x64/Release/EKYC.tlog/CL.read.1.tlog differ diff --git a/EKYC/x64/Release/EKYC.tlog/CL.write.1.tlog b/EKYC/x64/Release/EKYC.tlog/CL.write.1.tlog new file mode 100644 index 0000000..d9f8791 Binary files /dev/null and b/EKYC/x64/Release/EKYC.tlog/CL.write.1.tlog differ diff --git a/EKYC/x64/Release/EKYC.tlog/EKYC.lastbuildstate b/EKYC/x64/Release/EKYC.tlog/EKYC.lastbuildstate new file mode 100644 index 0000000..6397504 --- /dev/null +++ b/EKYC/x64/Release/EKYC.tlog/EKYC.lastbuildstate @@ -0,0 +1,2 @@ +PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.31.31103:TargetPlatformVersion=10.0.19041.0:VcpkgTriplet=x64-windows: +Release|x64|D:\1\20212\KTLT\EKYC\| diff --git a/EKYC/x64/Release/EKYC.tlog/EKYC.write.1u.tlog b/EKYC/x64/Release/EKYC.tlog/EKYC.write.1u.tlog new file mode 100644 index 0000000..54830f7 Binary files /dev/null and b/EKYC/x64/Release/EKYC.tlog/EKYC.write.1u.tlog differ diff --git a/EKYC/x64/Release/EKYC.tlog/link.command.1.tlog b/EKYC/x64/Release/EKYC.tlog/link.command.1.tlog new file mode 100644 index 0000000..120995e Binary files /dev/null and b/EKYC/x64/Release/EKYC.tlog/link.command.1.tlog differ diff --git a/EKYC/x64/Release/EKYC.tlog/link.read.1.tlog b/EKYC/x64/Release/EKYC.tlog/link.read.1.tlog new file mode 100644 index 0000000..2c0bdc3 Binary files /dev/null and b/EKYC/x64/Release/EKYC.tlog/link.read.1.tlog differ diff --git a/EKYC/x64/Release/EKYC.tlog/link.write.1.tlog b/EKYC/x64/Release/EKYC.tlog/link.write.1.tlog new file mode 100644 index 0000000..94c29ef Binary files /dev/null and b/EKYC/x64/Release/EKYC.tlog/link.write.1.tlog differ diff --git a/EKYC/x64/Release/EKYC.vcxproj.FileListAbsolute.txt b/EKYC/x64/Release/EKYC.vcxproj.FileListAbsolute.txt new file mode 100644 index 0000000..fa6719c --- /dev/null +++ b/EKYC/x64/Release/EKYC.vcxproj.FileListAbsolute.txt @@ -0,0 +1 @@ +D:\1\20212\KTLT\EKYC\EKYC\x64\Release\EKYC.vcxproj.CopyComplete diff --git a/EKYC/x64/Release/detect_corner.obj b/EKYC/x64/Release/detect_corner.obj new file mode 100644 index 0000000..04a9b67 Binary files /dev/null and b/EKYC/x64/Release/detect_corner.obj differ diff --git a/EKYC/x64/Release/extract_long.obj b/EKYC/x64/Release/extract_long.obj new file mode 100644 index 0000000..ac46b69 Binary files /dev/null and b/EKYC/x64/Release/extract_long.obj differ diff --git a/EKYC/x64/Release/main.obj b/EKYC/x64/Release/main.obj new file mode 100644 index 0000000..000b88e Binary files /dev/null and b/EKYC/x64/Release/main.obj differ diff --git a/EKYC/x64/Release/squares.obj b/EKYC/x64/Release/squares.obj new file mode 100644 index 0000000..b1db704 Binary files /dev/null and b/EKYC/x64/Release/squares.obj differ diff --git a/EKYC/x64/Release/vc143.pdb b/EKYC/x64/Release/vc143.pdb new file mode 100644 index 0000000..432eb75 Binary files /dev/null and b/EKYC/x64/Release/vc143.pdb differ diff --git a/EKYC/x64/Release/vcpkg.applocal.log b/EKYC/x64/Release/vcpkg.applocal.log new file mode 100644 index 0000000..9d3e6a4 --- /dev/null +++ b/EKYC/x64/Release/vcpkg.applocal.log @@ -0,0 +1,12 @@ + +D:\1\20212\KTLT\EKYC\x64\Release\tesseract41.dll +D:\1\20212\KTLT\EKYC\x64\Release\leptonica-1.82.0.dll +D:\1\20212\KTLT\EKYC\x64\Release\gif.dll +D:\1\20212\KTLT\EKYC\x64\Release\jpeg62.dll +D:\1\20212\KTLT\EKYC\x64\Release\openjp2.dll +D:\1\20212\KTLT\EKYC\x64\Release\libpng16.dll +D:\1\20212\KTLT\EKYC\x64\Release\zlib1.dll +D:\1\20212\KTLT\EKYC\x64\Release\tiff.dll +D:\1\20212\KTLT\EKYC\x64\Release\liblzma.dll +D:\1\20212\KTLT\EKYC\x64\Release\webpmux.dll +D:\1\20212\KTLT\EKYC\x64\Release\webp.dll diff --git a/EKYC/x64/Release/warp.obj b/EKYC/x64/Release/warp.obj new file mode 100644 index 0000000..b56a348 Binary files /dev/null and b/EKYC/x64/Release/warp.obj differ diff --git a/README.md b/README.md deleted file mode 100644 index 69237b0..0000000 --- a/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Extract_Information - -1. Install library -- In Visual Studio, open Project -> EKYC properties -> C/C++ -> General -> Additional Include Directories - add: opencv/build/include - vcpkg\installed\x64-windows\include\tesseract - vcpkg\installed\x64-windows\include - vcpkg\installed\x64-windows\include\leptonica - - In linker -> General -> Additional Library Directories - add: vcpkg\installed\x64-windows\lib - opencv\build\x64\vc15\lib diff --git a/x64/Release/EKYC.exe b/x64/Release/EKYC.exe new file mode 100644 index 0000000..886182b Binary files /dev/null and b/x64/Release/EKYC.exe differ diff --git a/x64/Release/EKYC.pdb b/x64/Release/EKYC.pdb new file mode 100644 index 0000000..598a0f1 Binary files /dev/null and b/x64/Release/EKYC.pdb differ diff --git a/x64/Release/gif.dll b/x64/Release/gif.dll new file mode 100644 index 0000000..96dc014 Binary files /dev/null and b/x64/Release/gif.dll differ diff --git a/x64/Release/jpeg62.dll b/x64/Release/jpeg62.dll new file mode 100644 index 0000000..e8a64b1 Binary files /dev/null and b/x64/Release/jpeg62.dll differ diff --git a/x64/Release/leptonica-1.82.0.dll b/x64/Release/leptonica-1.82.0.dll new file mode 100644 index 0000000..f829e14 Binary files /dev/null and b/x64/Release/leptonica-1.82.0.dll differ diff --git a/x64/Release/liblzma.dll b/x64/Release/liblzma.dll new file mode 100644 index 0000000..cd0e849 Binary files /dev/null and b/x64/Release/liblzma.dll differ diff --git a/x64/Release/libpng16.dll b/x64/Release/libpng16.dll new file mode 100644 index 0000000..c42a1c2 Binary files /dev/null and b/x64/Release/libpng16.dll differ diff --git a/x64/Release/openjp2.dll b/x64/Release/openjp2.dll new file mode 100644 index 0000000..c41d77a Binary files /dev/null and b/x64/Release/openjp2.dll differ diff --git a/x64/Release/tesseract41.dll b/x64/Release/tesseract41.dll new file mode 100644 index 0000000..1deb0a3 Binary files /dev/null and b/x64/Release/tesseract41.dll differ diff --git a/x64/Release/tiff.dll b/x64/Release/tiff.dll new file mode 100644 index 0000000..5e87c3e Binary files /dev/null and b/x64/Release/tiff.dll differ diff --git a/x64/Release/webp.dll b/x64/Release/webp.dll new file mode 100644 index 0000000..1e89d74 Binary files /dev/null and b/x64/Release/webp.dll differ diff --git a/x64/Release/webpmux.dll b/x64/Release/webpmux.dll new file mode 100644 index 0000000..aabed11 Binary files /dev/null and b/x64/Release/webpmux.dll differ diff --git a/x64/Release/zlib1.dll b/x64/Release/zlib1.dll new file mode 100644 index 0000000..d1f8c25 Binary files /dev/null and b/x64/Release/zlib1.dll differ