Skip to content

Commit

Permalink
Superresolution (#29)
Browse files Browse the repository at this point in the history
* superresolution project added, draft implementation, cleanup, fixes

* setup project fixed

* small refactoring, wait cursor

* about message updated

* Update README.md
  • Loading branch information
aliakseis authored Oct 12, 2021
1 parent d58cb2b commit 2a8260e
Show file tree
Hide file tree
Showing 30 changed files with 12,596 additions and 905 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -225,3 +225,5 @@ Player.VC.VC.opendb
CMakeLists.txt.user*

.clang-tidy

.vs/
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "Anime4KCPP"]
path = Anime4KCPP
url = https://github.com/TianZerL/Anime4KCPP.git
1 change: 1 addition & 0 deletions Anime4KCPP
Submodule Anime4KCPP added at 63ed93
274 changes: 274 additions & 0 deletions Anime4KCPPCore.vcxproj

Large diffs are not rendered by default.

192 changes: 192 additions & 0 deletions Anime4KCPPCore.vcxproj.filters
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="Anime4KCPP\core\src\AC.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\ACCreator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\ACCuda.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\ACNCNN.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\ACOpenCL.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\CPUACNet.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\CPUACNetProcessor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\CPUAnime4K09.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\CPUCNNProcessor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\CoreInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\CudaACNet.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\CudaAnime4K09.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\FilterProcessor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\NCNNACNet.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\OpenCLACNet.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\OpenCLAnime4K09.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\VideoIO.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\VideoIOAsync.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\VideoIOSerial.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\VideoIOThreads.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Anime4KCPP\core\src\VideoProcessor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Anime4KCPP\core\include\AC.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACCPU.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACCreator.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACCuda.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACException.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACInitializer.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACManager.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACNCNN.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACNetType.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACOpenCL.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACProcessor.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ACRegister.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\Anime4KCPP.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CNN.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CPUACNet.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CPUACNetProcessor.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CPUAnime4K09.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CPUCNNProcessor.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CoreInfo.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CudaACNet.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CudaAnime4K09.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\CudaInterface.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\FilterProcessor.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\NCNNACNet.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\NCNNACNetID.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\NCNNACNetModel.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\OpenCLACNet.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\OpenCLACNetKernel.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\OpenCLAnime4K09.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\OpenCLAnime4K09Kernel.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\Parallel.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\ThreadPool.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\VideoCodec.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\VideoIO.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\VideoIOAsync.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\VideoIOSerial.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\VideoIOThreads.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Anime4KCPP\core\include\VideoProcessor.hpp">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="Header Files">
<UniqueIdentifier>{047624CC-513D-36E8-B51C-5F37C672EBF6}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{788BFBE6-65CD-3D66-A4BD-D9B8297F3AEF}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>
12 changes: 6 additions & 6 deletions HttpDownload/HttpDownload.vcxproj
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
Expand All @@ -22,32 +22,32 @@
<ProjectGuid>{A4113679-4736-494B-B8D2-3C35B34E5491}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>HttpDownload</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
Expand Down
17 changes: 15 additions & 2 deletions Player.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
# Visual Studio 15
VisualStudioVersion = 15.0.28307.1622
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Player", "Player\Player.vcxproj", "{C90196CD-7354-4ED4-BFC0-E51A7E1CBE3C}"
ProjectSection(ProjectDependencies) = postProject
Expand All @@ -23,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dlls", "Dlls\Dlls.csproj",
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "audio", "audio\audio.vcxproj", "{8B955995-B5EC-41F0-940A-48A6F17BCBB8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Anime4KCPPCore", "Anime4KCPPCore.vcxproj", "{632353E4-4856-38F9-9E74-ED41BD99D7E5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Expand Down Expand Up @@ -83,8 +85,19 @@ Global
{8B955995-B5EC-41F0-940A-48A6F17BCBB8}.Release|Win32.Build.0 = Release|Win32
{8B955995-B5EC-41F0-940A-48A6F17BCBB8}.Release|x64.ActiveCfg = Release|x64
{8B955995-B5EC-41F0-940A-48A6F17BCBB8}.Release|x64.Build.0 = Release|x64
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Debug|Win32.ActiveCfg = Debug|Win32
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Debug|Win32.Build.0 = Debug|Win32
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Debug|x64.ActiveCfg = Debug|x64
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Debug|x64.Build.0 = Debug|x64
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Release|Win32.ActiveCfg = Release|Win32
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Release|Win32.Build.0 = Release|Win32
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Release|x64.ActiveCfg = Release|x64
{632353E4-4856-38F9-9E74-ED41BD99D7E5}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {75699A84-B7AB-4C3D-86E3-5E2370B5D57B}
EndGlobalSection
EndGlobal
73 changes: 73 additions & 0 deletions Player/ImageUpscale.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include "stdafx.h"

#include "ImageUpscale.h"

#include"AC.hpp"
#include"ACCreator.hpp"
#include"ACProcessor.hpp"
#include "Anime4KCPP.hpp"


const int currPlatformID = 0;
const int currDeviceID = 0;

bool CanUpscaleImage()
{
static const bool ok = Anime4KCPP::OpenCL::checkGPUSupport(currPlatformID, currDeviceID);
return ok;
}

bool EnableImageUpscale()
{
static Anime4KCPP::ACInitializer initializer;

static const auto ok = [] {
const int OpenCLQueueNum = 1;
const bool OpenCLParallelIO = false;

initializer.pushManager<Anime4KCPP::OpenCL::Manager<Anime4KCPP::OpenCL::ACNet>>(
currPlatformID, currDeviceID,
Anime4KCPP::CNNType::Default,
OpenCLQueueNum,
OpenCLParallelIO);

return initializer.init() == initializer.size();
}();
return ok;
}

void ImageUpscale(uint8_t* input, int inputStride, int inputWidth, int inputHeight, std::vector<uint8_t>& output, int& outputWidth, int& outputHeight)
{
Anime4KCPP::Parameters param{};
auto ac = Anime4KCPP::ACCreator::createUP(param, Anime4KCPP::Processor::Type::OpenCL_ACNet);

cv::Mat img(inputHeight, inputWidth, CV_8UC2, input, inputStride);

cv::Mat ycbcr_channels[2];
split(img, ycbcr_channels);

auto cbcr_channel = ycbcr_channels[1].reshape(2);
cv::Mat cbcr_channels[2];
split(cbcr_channel, cbcr_channels);

ac->loadImage(ycbcr_channels[0], cbcr_channels[0], cbcr_channels[1]);

ac->process();

std::vector <cv::Mat> channels(2);
std::vector <cv::Mat> out_cbcr_channels(2);

ac->saveImage(channels[0], out_cbcr_channels[0], out_cbcr_channels[1]);

outputWidth = channels[0].cols;
outputHeight = channels[0].rows;

cv::Mat CrCb;
merge(out_cbcr_channels, CrCb);
channels[1] = CrCb.reshape(1);

cv::Mat merged_img;
merge(channels, merged_img);

output.assign(merged_img.datastart, merged_img.dataend);
}
10 changes: 10 additions & 0 deletions Player/ImageUpscale.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#pragma once

#include <cstdint>
#include <vector>

bool CanUpscaleImage();

bool EnableImageUpscale();

void ImageUpscale(uint8_t* input, int inputStride, int inputWidth, int inputHeight, std::vector<uint8_t>& output, int& outputWidth, int& outputHeight);
Loading

0 comments on commit 2a8260e

Please sign in to comment.