├── src
├── solo2yolo-unity
│ ├── ProjectSettings
│ │ ├── ProjectVersion.txt
│ │ ├── Packages
│ │ │ └── com.unity.testtools.codecoverage
│ │ │ │ └── Settings.json
│ │ ├── ClusterInputManager.asset
│ │ ├── PresetManager.asset
│ │ ├── EditorBuildSettings.asset
│ │ ├── XRSettings.asset
│ │ ├── VersionControlSettings.asset
│ │ ├── TimeManager.asset
│ │ ├── VFXManager.asset
│ │ ├── AudioManager.asset
│ │ ├── TagManager.asset
│ │ ├── PackageManagerSettings.asset
│ │ ├── EditorSettings.asset
│ │ ├── UnityConnectSettings.asset
│ │ ├── DynamicsManager.asset
│ │ ├── MemorySettings.asset
│ │ ├── NavMeshAreas.asset
│ │ ├── Physics2DSettings.asset
│ │ ├── GraphicsSettings.asset
│ │ ├── SceneTemplateSettings.json
│ │ ├── InputManager.asset
│ │ ├── QualitySettings.asset
│ │ └── ProjectSettings.asset
│ ├── Packages
│ │ ├── solo2yolo
│ │ │ ├── Runtime
│ │ │ │ ├── solo2yolo-osx-x64
│ │ │ │ ├── solo2yolo-linux-x64
│ │ │ │ ├── solo2yolo-win-x64.exe
│ │ │ │ ├── solo2yolo-osx-x64.meta
│ │ │ │ ├── solo2yolo-linux-x64.meta
│ │ │ │ └── solo2yolo-win-x64.exe.meta
│ │ │ ├── package.json.meta
│ │ │ ├── Editor.meta
│ │ │ ├── Runtime.meta
│ │ │ ├── Editor
│ │ │ │ ├── z3lx.solo2yolo.Editor.asmdef.meta
│ │ │ │ ├── RectLayout.cs.meta
│ │ │ │ ├── DatasetConverterWindow.cs.meta
│ │ │ │ ├── z3lx.solo2yolo.Editor.asmdef
│ │ │ │ ├── RectLayout.cs
│ │ │ │ └── DatasetConverterWindow.cs
│ │ │ └── package.json
│ │ ├── manifest.json
│ │ └── packages-lock.json
│ ├── Assets
│ │ ├── Scenes.meta
│ │ └── Scenes
│ │ │ ├── SampleScene.unity.meta
│ │ │ └── SampleScene.unity
│ └── .gitignore
└── solo2yolo-dotnet
│ ├── ComputerVisionTask.cs
│ ├── solo2yolo-dotnet.csproj
│ ├── ConsoleUtility.cs
│ ├── Json
│ ├── Converters
│ │ ├── Vector2Converter.cs
│ │ ├── Vector3Converter.cs
│ │ ├── Vector4Converter.cs
│ │ ├── CaptureConverter.cs
│ │ └── AnnotationConverter.cs
│ └── DataModels
│ │ ├── FrameData.cs
│ │ ├── Annotation.cs
│ │ ├── RgbCapture.cs
│ │ ├── Metadata.cs
│ │ ├── AnnotationDefinition.cs
│ │ ├── BoundingBox2DAnnotation.cs
│ │ └── Capture.cs
│ ├── solo2yolo-dotnet.sln
│ ├── Program.cs
│ ├── .gitignore
│ └── DatasetConverter.cs
├── LICENSE
└── README.md
/src/solo2yolo-unity/ProjectSettings/ProjectVersion.txt:
--------------------------------------------------------------------------------
1 | m_EditorVersion: 2022.3.0f1
2 | m_EditorVersionWithRevision: 2022.3.0f1 (fb119bb0b476)
3 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "m_Dictionary": {
3 | "m_DictionaryValues": []
4 | }
5 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-osx-x64:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/z3lx/solo2yolo/HEAD/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-osx-x64
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-linux-x64:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/z3lx/solo2yolo/HEAD/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-linux-x64
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-win-x64.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/z3lx/solo2yolo/HEAD/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-win-x64.exe
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/ClusterInputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!236 &1
4 | ClusterInputManager:
5 | m_ObjectHideFlags: 0
6 | m_Inputs: []
7 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/ComputerVisionTask.cs:
--------------------------------------------------------------------------------
1 | namespace z3lx.solo2yolo
2 | {
3 | public enum ComputerVisionTask
4 | {
5 | Classify,
6 | Detect,
7 | Segment,
8 | Pose
9 | }
10 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/PresetManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1386491679 &1
4 | PresetManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_DefaultPresets: {}
8 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Assets/Scenes.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 445faaa47c0dd204baa363e3d46bbbc8
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Assets/Scenes/SampleScene.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9fc0d4010bbf28b4594072e72b8655ab
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/package.json.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9eaa7d71876030f40b3cfbd86b2b49e0
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-osx-x64.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bb11166b0c75933439bfd57f0c2f882c
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/EditorBuildSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1045 &1
4 | EditorBuildSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Scenes: []
8 | m_configObjects: {}
9 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Editor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 73050343639f1b941a200c855d4eb428
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Runtime.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 9be65e3a15f5b6c4eb56c659e8ec7f5f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-linux-x64.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4b7a37d77501b8440b85369542a6e731
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Runtime/solo2yolo-win-x64.exe.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 89f5669458f9c174b885e0f894036017
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/XRSettings.asset:
--------------------------------------------------------------------------------
1 | {
2 | "m_SettingKeys": [
3 | "VR Device Disabled",
4 | "VR Device User Alert"
5 | ],
6 | "m_SettingValues": [
7 | "False",
8 | "False"
9 | ]
10 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Editor/z3lx.solo2yolo.Editor.asmdef.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: cecdcfbec9fa03a459dff78c22d5a876
3 | AssemblyDefinitionImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/VersionControlSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!890905787 &1
4 | VersionControlSettings:
5 | m_ObjectHideFlags: 0
6 | m_Mode: Visible Meta Files
7 | m_CollabEditorSettings:
8 | inProgressEnabled: 1
9 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/TimeManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!5 &1
4 | TimeManager:
5 | m_ObjectHideFlags: 0
6 | Fixed Timestep: 0.02
7 | Maximum Allowed Timestep: 0.33333334
8 | m_TimeScale: 1
9 | Maximum Particle Timestep: 0.03
10 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "com.z3lx.solo2yolo",
3 | "version": "0.2.3",
4 | "displayName": "solo2yolo",
5 | "description": "solo2yolo is a tool that enables conversion of SOLO datasets to YOLO format from right within the Unity editor.",
6 | "unity": "2021.3",
7 | "unityRelease": "7f1"
8 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Editor/RectLayout.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6e6d08891d889344082b023f14573121
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Editor/DatasetConverterWindow.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7a88e0a6b3cf8da4e845515874c13d5b
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/VFXManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!937362698 &1
4 | VFXManager:
5 | m_ObjectHideFlags: 0
6 | m_IndirectShader: {fileID: 0}
7 | m_CopyBufferShader: {fileID: 0}
8 | m_SortShader: {fileID: 0}
9 | m_StripUpdateShader: {fileID: 0}
10 | m_RenderPipeSettingsPath:
11 | m_FixedTimeStep: 0.016666668
12 | m_MaxDeltaTime: 0.05
13 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Editor/z3lx.solo2yolo.Editor.asmdef:
--------------------------------------------------------------------------------
1 | {
2 | "name": "z3lx.solo2yolo.Editor",
3 | "rootNamespace": "solo2yolo.Editor",
4 | "references": [],
5 | "includePlatforms": [
6 | "Editor"
7 | ],
8 | "excludePlatforms": [],
9 | "allowUnsafeCode": false,
10 | "overrideReferences": false,
11 | "precompiledReferences": [],
12 | "autoReferenced": true,
13 | "defineConstraints": [],
14 | "versionDefines": [],
15 | "noEngineReferences": false
16 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/AudioManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!11 &1
4 | AudioManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Volume: 1
8 | Rolloff Scale: 1
9 | Doppler Factor: 1
10 | Default Speaker Mode: 2
11 | m_SampleRate: 0
12 | m_DSPBufferSize: 1024
13 | m_VirtualVoiceCount: 512
14 | m_RealVoiceCount: 32
15 | m_SpatializerPlugin:
16 | m_AmbisonicDecoderPlugin:
17 | m_DisableAudio: 0
18 | m_VirtualizeEffects: 1
19 | m_RequestedDSPBufferSize: 1024
20 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/TagManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!78 &1
4 | TagManager:
5 | serializedVersion: 2
6 | tags: []
7 | layers:
8 | - Default
9 | - TransparentFX
10 | - Ignore Raycast
11 | -
12 | - Water
13 | - UI
14 | -
15 | -
16 | -
17 | -
18 | -
19 | -
20 | -
21 | -
22 | -
23 | -
24 | -
25 | -
26 | -
27 | -
28 | -
29 | -
30 | -
31 | -
32 | -
33 | -
34 | -
35 | -
36 | -
37 | -
38 | -
39 | -
40 | m_SortingLayers:
41 | - name: Default
42 | uniqueID: 0
43 | locked: 0
44 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/solo2yolo-dotnet.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net6.0
6 | solo2yolo
7 | enable
8 | enable
9 | solo2yolo
10 | 0.1.0
11 | z3lx
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/ConsoleUtility.cs:
--------------------------------------------------------------------------------
1 | namespace z3lx.solo2yolo
2 | {
3 | public static class ConsoleUtility
4 | {
5 | public static void PrintInfo(string message)
6 | {
7 | Console.ForegroundColor = ConsoleColor.White;
8 | Console.WriteLine($"[INFO] {message}");
9 | Console.ResetColor();
10 | }
11 |
12 | public static void PrintWarning(string message)
13 | {
14 | Console.ForegroundColor = ConsoleColor.Yellow;
15 | Console.WriteLine($"[WARN] {message}");
16 | Console.ResetColor();
17 | }
18 |
19 | public static void PrintError(string message)
20 | {
21 | Console.ForegroundColor = ConsoleColor.Red;
22 | Console.WriteLine($"[ERR ] {message}");
23 | Console.ResetColor();
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Editor/RectLayout.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 |
3 | namespace z3lx.solo2yolo
4 | {
5 | internal class RectLayout
6 | {
7 | public float lineHeight;
8 | public Rect contentRect;
9 |
10 | private Vector2 _currentPosition;
11 |
12 | public Rect GetNextRect(float width, float height)
13 | {
14 | float x = _currentPosition.x;
15 | float y = _currentPosition.y + ((lineHeight - height) / 2);
16 | _currentPosition.x += width;
17 | return new Rect(x, y, width, height);
18 | }
19 |
20 | public Rect GetNextRect(float width)
21 | {
22 | return GetNextRect(width, lineHeight);
23 | }
24 |
25 | public void NewLine()
26 | {
27 | _currentPosition.x = 0;
28 | _currentPosition.y += lineHeight;
29 | }
30 | }
31 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/Converters/Vector2Converter.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using Newtonsoft.Json.Linq;
3 | using System.Numerics;
4 |
5 | namespace z3lx.solo2yolo.Json.Converters
6 | {
7 | public class Vector2Converter : JsonConverter
8 | {
9 | public override bool CanConvert(Type objectType)
10 | {
11 | return objectType == typeof(Vector2);
12 | }
13 |
14 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
15 | {
16 | JArray jsonArray = JArray.Load(reader);
17 | if (jsonArray.Count != 2)
18 | throw new JsonException("Invalid array length for Vector2");
19 |
20 | float x = jsonArray[0].Value();
21 | float y = jsonArray[1].Value();
22 |
23 | return new Vector2(x, y);
24 | }
25 |
26 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
27 | {
28 | throw new NotImplementedException();
29 | }
30 | }
31 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/PackageManagerSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!114 &1
4 | MonoBehaviour:
5 | m_ObjectHideFlags: 61
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | m_GameObject: {fileID: 0}
10 | m_Enabled: 1
11 | m_EditorHideFlags: 0
12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
13 | m_Name:
14 | m_EditorClassIdentifier:
15 | m_EnablePreReleasePackages: 0
16 | m_EnablePackageDependencies: 0
17 | m_AdvancedSettingsExpanded: 1
18 | m_ScopedRegistriesSettingsExpanded: 1
19 | m_SeeAllPackageVersions: 0
20 | oneTimeWarningShown: 0
21 | m_Registries:
22 | - m_Id: main
23 | m_Name:
24 | m_Url: https://packages.unity.com
25 | m_Scopes: []
26 | m_IsDefault: 1
27 | m_Capabilities: 7
28 | m_UserSelectedRegistryName:
29 | m_UserAddingNewScopedRegistry: 0
30 | m_RegistryInfoDraft:
31 | m_Modified: 0
32 | m_ErrorMessage:
33 | m_UserModificationsInstanceId: -830
34 | m_OriginalInstanceId: -832
35 | m_LoadAssets: 0
36 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 z3lx
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/EditorSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!159 &1
4 | EditorSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 11
7 | m_ExternalVersionControlSupport: Visible Meta Files
8 | m_SerializationMode: 2
9 | m_LineEndingsForNewScripts: 0
10 | m_DefaultBehaviorMode: 0
11 | m_PrefabRegularEnvironment: {fileID: 0}
12 | m_PrefabUIEnvironment: {fileID: 0}
13 | m_SpritePackerMode: 0
14 | m_SpritePackerPaddingPower: 1
15 | m_EtcTextureCompressorBehavior: 1
16 | m_EtcTextureFastCompressor: 1
17 | m_EtcTextureNormalCompressor: 2
18 | m_EtcTextureBestCompressor: 4
19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref
20 | m_ProjectGenerationRootNamespace:
21 | m_CollabEditorSettings:
22 | inProgressEnabled: 1
23 | m_EnableTextureStreamingInEditMode: 1
24 | m_EnableTextureStreamingInPlayMode: 1
25 | m_AsyncShaderCompilation: 1
26 | m_EnterPlayModeOptionsEnabled: 0
27 | m_EnterPlayModeOptions: 3
28 | m_ShowLightmapResolutionOverlay: 1
29 | m_UseLegacyProbeSampleCount: 0
30 | m_SerializeInlineMappingsOnOneLine: 1
31 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/UnityConnectSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!310 &1
4 | UnityConnectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 1
7 | m_Enabled: 0
8 | m_TestMode: 0
9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com
12 | m_DashboardUrl: https://dashboard.unity3d.com
13 | m_TestInitMode: 0
14 | CrashReportingSettings:
15 | m_EventUrl: https://perf-events.cloud.unity3d.com
16 | m_Enabled: 0
17 | m_LogBufferSize: 10
18 | m_CaptureEditorExceptions: 1
19 | UnityPurchasingSettings:
20 | m_Enabled: 0
21 | m_TestMode: 0
22 | UnityAnalyticsSettings:
23 | m_Enabled: 0
24 | m_TestMode: 0
25 | m_InitializeOnStartup: 1
26 | m_PackageRequiringCoreStatsPresent: 0
27 | UnityAdsSettings:
28 | m_Enabled: 0
29 | m_InitializeOnStartup: 1
30 | m_TestMode: 0
31 | m_IosGameId:
32 | m_AndroidGameId:
33 | m_GameIds: {}
34 | m_GameId:
35 | PerformanceReportingSettings:
36 | m_Enabled: 0
37 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/Converters/Vector3Converter.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using Newtonsoft.Json.Linq;
3 | using System.Numerics;
4 |
5 | namespace z3lx.solo2yolo.Json.Converters
6 | {
7 | public class Vector3Converter : JsonConverter
8 | {
9 | public override bool CanConvert(Type objectType)
10 | {
11 | return objectType == typeof(Vector3);
12 | }
13 |
14 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
15 | {
16 | JArray jsonArray = JArray.Load(reader);
17 | if (jsonArray.Count != 3)
18 | throw new JsonException("Invalid array length for Vector3");
19 |
20 | float x = jsonArray[0].Value();
21 | float y = jsonArray[1].Value();
22 | float z = jsonArray[2].Value();
23 |
24 | return new Vector3(x, y, z);
25 | }
26 |
27 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
28 | {
29 | throw new NotImplementedException();
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/DataModels/FrameData.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 |
3 | namespace z3lx.solo2yolo.Json.DataModels
4 | {
5 | [Serializable]
6 | public sealed class FrameData
7 | {
8 | ///
9 | /// The integer ID of the frame.
10 | ///
11 | [JsonProperty("frame")]
12 | public int Frame { get; set; }
13 |
14 | ///
15 | /// The sequence number.
16 | ///
17 | [JsonProperty("sequence")]
18 | public int Sequence { get; set; }
19 |
20 | ///
21 | /// The step inside the sequence.
22 | ///
23 | [JsonProperty("step")]
24 | public int Step { get; set; }
25 |
26 | ///
27 | /// Timestamp in milliseconds since the sequence started.
28 | ///
29 | [JsonProperty("timestamp")]
30 | public float Timestamp { get; set; }
31 |
32 | ///
33 | /// The list of captures.
34 | ///
35 | [JsonProperty("captures")]
36 | public Capture[]? Captures { get; set; }
37 | }
38 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/Converters/Vector4Converter.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using Newtonsoft.Json.Linq;
3 | using System.Numerics;
4 |
5 | namespace z3lx.solo2yolo.Json.Converters
6 | {
7 | public class Vector4Converter : JsonConverter
8 | {
9 | public override bool CanConvert(Type objectType)
10 | {
11 | return objectType == typeof(Vector4);
12 | }
13 |
14 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
15 | {
16 | JArray jsonArray = JArray.Load(reader);
17 | if (jsonArray.Count != 4)
18 | throw new JsonException("Invalid array length for Vector4");
19 |
20 | float x = jsonArray[0].Value();
21 | float y = jsonArray[1].Value();
22 | float z = jsonArray[2].Value();
23 | float w = jsonArray[3].Value();
24 |
25 | return new Vector4(x, y, z, w);
26 | }
27 |
28 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
29 | {
30 | throw new NotImplementedException();
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/solo2yolo-dotnet.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.5.33516.290
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "solo2yolo-dotnet", "solo2yolo-dotnet.csproj", "{8449B1D8-EC10-49B5-9485-1BB19F95D2CA}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {8449B1D8-EC10-49B5-9485-1BB19F95D2CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {8449B1D8-EC10-49B5-9485-1BB19F95D2CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {8449B1D8-EC10-49B5-9485-1BB19F95D2CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {8449B1D8-EC10-49B5-9485-1BB19F95D2CA}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {7DCBA89E-9E66-4592-8B46-B16A2E4E8014}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/DynamicsManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!55 &1
4 | PhysicsManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 11
7 | m_Gravity: {x: 0, y: -9.81, z: 0}
8 | m_DefaultMaterial: {fileID: 0}
9 | m_BounceThreshold: 2
10 | m_SleepThreshold: 0.005
11 | m_DefaultContactOffset: 0.01
12 | m_DefaultSolverIterations: 6
13 | m_DefaultSolverVelocityIterations: 1
14 | m_QueriesHitBackfaces: 0
15 | m_QueriesHitTriggers: 1
16 | m_EnableAdaptiveForce: 0
17 | m_ClothInterCollisionDistance: 0
18 | m_ClothInterCollisionStiffness: 0
19 | m_ContactsGeneration: 1
20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
21 | m_AutoSimulation: 1
22 | m_AutoSyncTransforms: 0
23 | m_ReuseCollisionCallbacks: 1
24 | m_ClothInterCollisionSettingsToggle: 0
25 | m_ContactPairsMode: 0
26 | m_BroadphaseType: 0
27 | m_WorldBounds:
28 | m_Center: {x: 0, y: 0, z: 0}
29 | m_Extent: {x: 250, y: 250, z: 250}
30 | m_WorldSubdivisions: 8
31 | m_FrictionType: 0
32 | m_EnableEnhancedDeterminism: 0
33 | m_EnableUnifiedHeightmaps: 1
34 | m_DefaultMaxAngluarSpeed: 7
35 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/MemorySettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!387306366 &1
4 | MemorySettings:
5 | m_ObjectHideFlags: 0
6 | m_EditorMemorySettings:
7 | m_MainAllocatorBlockSize: -1
8 | m_ThreadAllocatorBlockSize: -1
9 | m_MainGfxBlockSize: -1
10 | m_ThreadGfxBlockSize: -1
11 | m_CacheBlockSize: -1
12 | m_TypetreeBlockSize: -1
13 | m_ProfilerBlockSize: -1
14 | m_ProfilerEditorBlockSize: -1
15 | m_BucketAllocatorGranularity: -1
16 | m_BucketAllocatorBucketsCount: -1
17 | m_BucketAllocatorBlockSize: -1
18 | m_BucketAllocatorBlockCount: -1
19 | m_ProfilerBucketAllocatorGranularity: -1
20 | m_ProfilerBucketAllocatorBucketsCount: -1
21 | m_ProfilerBucketAllocatorBlockSize: -1
22 | m_ProfilerBucketAllocatorBlockCount: -1
23 | m_TempAllocatorSizeMain: -1
24 | m_JobTempAllocatorBlockSize: -1
25 | m_BackgroundJobTempAllocatorBlockSize: -1
26 | m_JobTempAllocatorReducedBlockSize: -1
27 | m_TempAllocatorSizeGIBakingWorker: -1
28 | m_TempAllocatorSizeNavMeshWorker: -1
29 | m_TempAllocatorSizeAudioWorker: -1
30 | m_TempAllocatorSizeCloudWorker: -1
31 | m_TempAllocatorSizeGfx: -1
32 | m_TempAllocatorSizeJobWorker: -1
33 | m_TempAllocatorSizeBackgroundWorker: -1
34 | m_TempAllocatorSizePreloadManager: -1
35 | m_PlatformMemorySettings: {}
36 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/DataModels/Annotation.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using z3lx.solo2yolo.Json.Converters;
3 |
4 | namespace z3lx.solo2yolo.Json.DataModels
5 | {
6 | ///
7 | /// An annotation record contains the ground truth for a sensor either inline or in a separate file. A single capture may
8 | /// contain many annotations each corresponding to one active Labeler in the simulation.
9 | ///
10 | [Serializable]
11 | [JsonObject(ItemRequired = Required.Always)]
12 | [JsonConverter(typeof(AnnotationConverter))]
13 | public abstract class Annotation
14 | {
15 | ///
16 | /// The class type of the annotation.
17 | ///
18 | [JsonProperty("@type")]
19 | public string Type { get; set; }
20 |
21 | ///
22 | /// The registered ID of the annotation.
23 | ///
24 | [JsonProperty("id")]
25 | public string Id { get; set; }
26 |
27 | ///
28 | /// The ID of the sensor that this annotation is attached to.
29 | ///
30 | [JsonProperty("sensorId")]
31 | public string SensorId { get; set; }
32 |
33 | ///
34 | /// The human readable description of the sensor.
35 | ///
36 | [JsonProperty("description")]
37 | public string Description { get; set; }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/Converters/CaptureConverter.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using Newtonsoft.Json.Linq;
3 | using z3lx.solo2yolo.Json.DataModels;
4 |
5 | namespace z3lx.solo2yolo.Json.Converters
6 | {
7 | public class CaptureConverter : JsonConverter
8 | {
9 | public override bool CanConvert(Type objectType)
10 | {
11 | return objectType == typeof(Capture);
12 | }
13 |
14 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
15 | {
16 | JObject jsonObject = JObject.Load(reader);
17 |
18 | JToken jsonToken = jsonObject["@type"];
19 | if (jsonToken == null || jsonToken.Type != JTokenType.String)
20 | throw new JsonSerializationException("Invalid @type property.");
21 |
22 | string type = jsonObject["@type"].Value();
23 | Capture capture = type switch
24 | {
25 | "type.unity.com/unity.solo.RGBCamera" => new RgbCapture(),
26 | _ => throw new NotImplementedException(),
27 | };
28 | serializer.Populate(jsonObject.CreateReader(), capture);
29 | return capture;
30 | }
31 |
32 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
33 | {
34 | throw new NotImplementedException();
35 | }
36 | }
37 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/DataModels/RgbCapture.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System.Numerics;
3 | using z3lx.solo2yolo.Json.Converters;
4 |
5 | namespace z3lx.solo2yolo.Json.DataModels
6 | {
7 | ///
8 | /// Extends the capture class with data specific for an RGB camera sensor.
9 | ///
10 | [Serializable]
11 | public sealed class RgbCapture : Capture
12 | {
13 | ///
14 | /// A single file that stores sensor captured data.
15 | ///
16 | [JsonProperty("filename")]
17 | public string FileName { get; set; }
18 |
19 | ///
20 | /// The format of the sensor captured file.
21 | ///
22 | [JsonProperty("imageFormat")]
23 | public string ImageFormat { get; set; }
24 |
25 | ///
26 | /// The image size in pixels (width/height).
27 | ///
28 | [JsonProperty("dimension")]
29 | [JsonConverter(typeof(Vector2Converter))]
30 | public Vector2 Dimension { get; set; }
31 |
32 | ///
33 | /// Holds the type of projection the camera used for the capture (perspective/orthographic).
34 | ///
35 | [JsonProperty("projection")]
36 | public string Projection { get; set; }
37 |
38 | ///
39 | /// The projection matrix of the camera.
40 | ///
41 | [JsonProperty("matrix")]
42 | public float[] Matrix { get; set; }
43 | }
44 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "com.unity.ide.visualstudio": "2.0.18",
4 | "com.unity.modules.ai": "1.0.0",
5 | "com.unity.modules.androidjni": "1.0.0",
6 | "com.unity.modules.animation": "1.0.0",
7 | "com.unity.modules.assetbundle": "1.0.0",
8 | "com.unity.modules.audio": "1.0.0",
9 | "com.unity.modules.cloth": "1.0.0",
10 | "com.unity.modules.director": "1.0.0",
11 | "com.unity.modules.imageconversion": "1.0.0",
12 | "com.unity.modules.imgui": "1.0.0",
13 | "com.unity.modules.jsonserialize": "1.0.0",
14 | "com.unity.modules.particlesystem": "1.0.0",
15 | "com.unity.modules.physics": "1.0.0",
16 | "com.unity.modules.physics2d": "1.0.0",
17 | "com.unity.modules.screencapture": "1.0.0",
18 | "com.unity.modules.terrain": "1.0.0",
19 | "com.unity.modules.terrainphysics": "1.0.0",
20 | "com.unity.modules.tilemap": "1.0.0",
21 | "com.unity.modules.ui": "1.0.0",
22 | "com.unity.modules.uielements": "1.0.0",
23 | "com.unity.modules.umbra": "1.0.0",
24 | "com.unity.modules.unityanalytics": "1.0.0",
25 | "com.unity.modules.unitywebrequest": "1.0.0",
26 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
27 | "com.unity.modules.unitywebrequestaudio": "1.0.0",
28 | "com.unity.modules.unitywebrequesttexture": "1.0.0",
29 | "com.unity.modules.unitywebrequestwww": "1.0.0",
30 | "com.unity.modules.vehicles": "1.0.0",
31 | "com.unity.modules.video": "1.0.0",
32 | "com.unity.modules.vr": "1.0.0",
33 | "com.unity.modules.wind": "1.0.0",
34 | "com.unity.modules.xr": "1.0.0"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/.gitignore:
--------------------------------------------------------------------------------
1 | # This .gitignore file should be placed at the root of your Unity project directory
2 | #
3 | # Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
4 | #
5 | /[Ll]ibrary/
6 | /[Tt]emp/
7 | /[Oo]bj/
8 | /[Bb]uild/
9 | /[Bb]uilds/
10 | /[Ll]ogs/
11 | /[Uu]ser[Ss]ettings/
12 |
13 | # MemoryCaptures can get excessive in size.
14 | # They also could contain extremely sensitive data
15 | /[Mm]emoryCaptures/
16 |
17 | # Recordings can get excessive in size
18 | /[Rr]ecordings/
19 |
20 | # Uncomment this line if you wish to ignore the asset store tools plugin
21 | # /[Aa]ssets/AssetStoreTools*
22 |
23 | # Autogenerated Jetbrains Rider plugin
24 | /[Aa]ssets/Plugins/Editor/JetBrains*
25 |
26 | # Visual Studio cache directory
27 | .vs/
28 |
29 | # Gradle cache directory
30 | .gradle/
31 |
32 | # Autogenerated VS/MD/Consulo solution and project files
33 | ExportedObj/
34 | .consulo/
35 | *.csproj
36 | *.unityproj
37 | *.sln
38 | *.suo
39 | *.tmp
40 | *.user
41 | *.userprefs
42 | *.pidb
43 | *.booproj
44 | *.svd
45 | *.pdb
46 | *.mdb
47 | *.opendb
48 | *.VC.db
49 | *.vsconfig
50 |
51 | # Unity3D generated meta files
52 | *.pidb.meta
53 | *.pdb.meta
54 | *.mdb.meta
55 |
56 | # Unity3D generated file on crash reports
57 | sysinfo.txt
58 |
59 | # Builds
60 | *.apk
61 | *.aab
62 | *.unitypackage
63 | *.app
64 |
65 | # Crashlytics generated file
66 | crashlytics-build.properties
67 |
68 | # Packed Addressables
69 | /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin*
70 |
71 | # Temporary auto-generated Android Assets
72 | /[Aa]ssets/[Ss]treamingAssets/aa.meta
73 | /[Aa]ssets/[Ss]treamingAssets/aa/*
74 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/Converters/AnnotationConverter.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using Newtonsoft.Json.Linq;
3 | using z3lx.solo2yolo.Json.DataModels;
4 |
5 | namespace z3lx.solo2yolo.Json.Converters
6 | {
7 | public class AnnotationConverter : JsonConverter
8 | {
9 | public override bool CanConvert(Type objectType)
10 | {
11 | return objectType == typeof(Annotation);
12 | }
13 |
14 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
15 | {
16 | JObject jsonObject = JObject.Load(reader);
17 |
18 | JToken jsonToken = jsonObject["@type"];
19 | if (jsonToken == null || jsonToken.Type != JTokenType.String)
20 | throw new JsonSerializationException("Invalid @type property.");
21 |
22 | string type = jsonObject["@type"].Value();
23 | Annotation annotation = type switch
24 | {
25 | "type.unity.com/unity.solo.BoundingBox2DAnnotation" => new BoundingBox2DAnnotation(),
26 | "type.unity.com/unity.solo.InstanceSegmentationAnnotation" => throw new NotImplementedException(),
27 | "type.unity.com/unity.solo.KeypointAnnotation" => throw new NotImplementedException(),
28 | _ => throw new NotImplementedException(),
29 | };
30 | serializer.Populate(jsonObject.CreateReader(), annotation);
31 | return annotation;
32 | }
33 |
34 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
35 | {
36 | throw new NotImplementedException();
37 | }
38 | }
39 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/NavMeshAreas.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!126 &1
4 | NavMeshProjectSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | areas:
8 | - name: Walkable
9 | cost: 1
10 | - name: Not Walkable
11 | cost: 1
12 | - name: Jump
13 | cost: 2
14 | - name:
15 | cost: 1
16 | - name:
17 | cost: 1
18 | - name:
19 | cost: 1
20 | - name:
21 | cost: 1
22 | - name:
23 | cost: 1
24 | - name:
25 | cost: 1
26 | - name:
27 | cost: 1
28 | - name:
29 | cost: 1
30 | - name:
31 | cost: 1
32 | - name:
33 | cost: 1
34 | - name:
35 | cost: 1
36 | - name:
37 | cost: 1
38 | - name:
39 | cost: 1
40 | - name:
41 | cost: 1
42 | - name:
43 | cost: 1
44 | - name:
45 | cost: 1
46 | - name:
47 | cost: 1
48 | - name:
49 | cost: 1
50 | - name:
51 | cost: 1
52 | - name:
53 | cost: 1
54 | - name:
55 | cost: 1
56 | - name:
57 | cost: 1
58 | - name:
59 | cost: 1
60 | - name:
61 | cost: 1
62 | - name:
63 | cost: 1
64 | - name:
65 | cost: 1
66 | - name:
67 | cost: 1
68 | - name:
69 | cost: 1
70 | - name:
71 | cost: 1
72 | m_LastAgentTypeID: -887442657
73 | m_Settings:
74 | - serializedVersion: 2
75 | agentTypeID: 0
76 | agentRadius: 0.5
77 | agentHeight: 2
78 | agentSlope: 45
79 | agentClimb: 0.75
80 | ledgeDropHeight: 0
81 | maxJumpAcrossDistance: 0
82 | minRegionArea: 2
83 | manualCellSize: 0
84 | cellSize: 0.16666667
85 | manualTileSize: 0
86 | tileSize: 256
87 | accuratePlacement: 0
88 | debug:
89 | m_Flags: 0
90 | m_SettingNames:
91 | - Humanoid
92 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/DataModels/Metadata.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 |
3 | namespace z3lx.solo2yolo.Json.DataModels
4 | {
5 | [Serializable]
6 | [JsonObject(ItemRequired = Required.Always)]
7 | public sealed class Metadata
8 | {
9 | [JsonProperty("unityVersion")]
10 | public string UnityVersion { get; set; }
11 |
12 | [JsonProperty("perceptionVersion")]
13 | public string PerceptionVersion { get; set; }
14 |
15 | [JsonProperty("renderPipeline")]
16 | public string RenderPipeline { get; set; }
17 |
18 | [JsonProperty("simulationStartTime")]
19 | public string SimulationStartTime { get; set; }
20 |
21 | [JsonProperty("scenarioRandomSeed")]
22 | public int ScenarioRandomSeed { get; set; }
23 |
24 | [JsonProperty("scenarioActiveRandomizers")]
25 | public string[] ScenarioActiveRandomizers { get; set; }
26 |
27 | [JsonProperty("totalFrames")]
28 | public int TotalFrames { get; set; }
29 |
30 | [JsonProperty("totalSequences")]
31 | public int TotalSequences { get; set; }
32 |
33 | [JsonProperty("sensors")]
34 | public string[] Sensors { get; set; }
35 |
36 | [JsonProperty("metricCollectors")]
37 | public string[] MetricCollectors { get; set; }
38 |
39 | [JsonProperty("simulationEndTime")]
40 | public string SimulationEndTime { get; set; }
41 |
42 | [JsonProperty("annotators")]
43 | public Annotator[] Annotators { get; set; }
44 |
45 | [Serializable]
46 | public class Annotator
47 | {
48 | [JsonProperty("name")]
49 | public string Name { get; set; }
50 |
51 | [JsonProperty("type")]
52 | public string Type { get; set; }
53 | }
54 | }
55 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/DataModels/AnnotationDefinition.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 |
3 | namespace z3lx.solo2yolo.Json.DataModels
4 | {
5 | [Serializable]
6 | [JsonObject(ItemRequired = Required.Always)]
7 | public sealed class AnnotationDefinitions
8 | {
9 | [JsonProperty("annotationDefinitions")]
10 | public AnnotationDefinition[] Values { get; set; }
11 | }
12 |
13 | [Serializable]
14 | [JsonObject(ItemRequired = Required.Always)]
15 | public sealed class AnnotationDefinition
16 | {
17 | ///
18 | /// The class type of the annotation.
19 | ///
20 | [JsonProperty("@type")]
21 | public string Type { get; set; }
22 |
23 | ///
24 | /// The registered ID of the annotation, assigned in the Perception Camera UI.
25 | ///
26 | [JsonProperty("id")]
27 | public string Id { get; set; }
28 |
29 | ///
30 | /// The description of this annotation definition.
31 | ///
32 | [JsonProperty("description")]
33 | public string Description { get; set; }
34 |
35 | ///
36 | /// Format-specific specification for the annotation values.
37 | ///
38 | [JsonProperty("spec")]
39 | public Specification[] Specifications { get; set; }
40 |
41 | // TODO: Check annotation-specific properties
42 | [Serializable]
43 | [JsonObject(ItemRequired = Required.Always)]
44 | public sealed class Specification
45 | {
46 | [JsonProperty("label_id")]
47 | public int LabelId { get; set; }
48 |
49 | [JsonProperty("label_name")]
50 | public string labelName { get; set; }
51 | }
52 | }
53 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/DataModels/BoundingBox2DAnnotation.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System.Numerics;
3 | using z3lx.solo2yolo.Json.Converters;
4 |
5 | namespace z3lx.solo2yolo.Json.DataModels
6 | {
7 | ///
8 | /// Each bounding box record maps a tuple of (instance, label) to a set of 4 variables (x, y, width, height) that draws a
9 | /// bounding box. The OpenCV 2D coordinate system is followed, where the origin (0,0), (x = 0, y = 0) is at the top left of the image.
10 | ///
11 | [Serializable]
12 | [JsonObject(ItemRequired = Required.Default)]
13 | public sealed class BoundingBox2DAnnotation : Annotation
14 | {
15 | ///
16 | /// Array of bounding boxes in the frame.
17 | ///
18 | [JsonProperty("values")]
19 | public Value[] Values { get; set; }
20 |
21 | [Serializable]
22 | [JsonObject(ItemRequired = Required.Always)]
23 | public class Value
24 | {
25 | ///
26 | /// Integer id of the entity.
27 | ///
28 | [JsonProperty("instanceId")]
29 | public int InstanceId { get; set; }
30 |
31 | ///
32 | /// Integer identifier of the label.
33 | ///
34 | [JsonProperty("labelId")]
35 | public int LabelId { get; set; }
36 |
37 | ///
38 | /// String identifier of the label.
39 | ///
40 | [JsonProperty("labelName")]
41 | public string LabelName { get; set; }
42 |
43 | ///
44 | /// The pixel location of the upper left corner of the box.
45 | ///
46 | [JsonProperty("origin")]
47 | [JsonConverter(typeof(Vector2Converter))]
48 | public Vector2 Origin { get; set; }
49 |
50 | ///
51 | /// The number of pixels in the x and y direction.
52 | ///
53 | [JsonProperty("dimension")]
54 | [JsonConverter(typeof(Vector2Converter))]
55 | public Vector2 Dimension { get; set; }
56 | }
57 | }
58 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/Physics2DSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!19 &1
4 | Physics2DSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 4
7 | m_Gravity: {x: 0, y: -9.81}
8 | m_DefaultMaterial: {fileID: 0}
9 | m_VelocityIterations: 8
10 | m_PositionIterations: 3
11 | m_VelocityThreshold: 1
12 | m_MaxLinearCorrection: 0.2
13 | m_MaxAngularCorrection: 8
14 | m_MaxTranslationSpeed: 100
15 | m_MaxRotationSpeed: 360
16 | m_BaumgarteScale: 0.2
17 | m_BaumgarteTimeOfImpactScale: 0.75
18 | m_TimeToSleep: 0.5
19 | m_LinearSleepTolerance: 0.01
20 | m_AngularSleepTolerance: 2
21 | m_DefaultContactOffset: 0.01
22 | m_JobOptions:
23 | serializedVersion: 2
24 | useMultithreading: 0
25 | useConsistencySorting: 0
26 | m_InterpolationPosesPerJob: 100
27 | m_NewContactsPerJob: 30
28 | m_CollideContactsPerJob: 100
29 | m_ClearFlagsPerJob: 200
30 | m_ClearBodyForcesPerJob: 200
31 | m_SyncDiscreteFixturesPerJob: 50
32 | m_SyncContinuousFixturesPerJob: 50
33 | m_FindNearestContactsPerJob: 100
34 | m_UpdateTriggerContactsPerJob: 100
35 | m_IslandSolverCostThreshold: 100
36 | m_IslandSolverBodyCostScale: 1
37 | m_IslandSolverContactCostScale: 10
38 | m_IslandSolverJointCostScale: 10
39 | m_IslandSolverBodiesPerJob: 50
40 | m_IslandSolverContactsPerJob: 50
41 | m_AutoSimulation: 1
42 | m_QueriesHitTriggers: 1
43 | m_QueriesStartInColliders: 1
44 | m_CallbacksOnDisable: 1
45 | m_ReuseCollisionCallbacks: 1
46 | m_AutoSyncTransforms: 0
47 | m_AlwaysShowColliders: 0
48 | m_ShowColliderSleep: 1
49 | m_ShowColliderContacts: 0
50 | m_ShowColliderAABB: 0
51 | m_ContactArrowScale: 0.2
52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
57 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Json/DataModels/Capture.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System.Numerics;
3 | using z3lx.solo2yolo.Json.Converters;
4 |
5 | namespace z3lx.solo2yolo.Json.DataModels
6 | {
7 | ///
8 | /// A capture record contains the relationship between a captured file, a collection of annotations, and extra
9 | /// metadata that describes the state of the sensor.
10 | ///
11 | [Serializable]
12 | [JsonObject(ItemRequired = Required.Always)]
13 | [JsonConverter(typeof(CaptureConverter))]
14 | public abstract class Capture
15 | {
16 | ///
17 | /// The class type of the sensor.
18 | ///
19 | [JsonProperty("@type")]
20 | public string Type { get; set; }
21 |
22 | ///
23 | /// The ID of the sensor that made the capture.
24 | ///
25 | [JsonProperty("id")]
26 | public string Id { get; set; }
27 |
28 | ///
29 | /// Human readable description of the sensor.
30 | ///
31 | [JsonProperty("description")]
32 | public string Description { get; set; }
33 |
34 | ///
35 | /// Position in meters: (x, y, z) with respect to the global coordinate system.
36 | ///
37 | [JsonProperty("position")]
38 | [JsonConverter(typeof(Vector3Converter))]
39 | public Vector3 Position { get; set; }
40 |
41 | ///
42 | /// Orientation as quaternion: w, x, y, z.
43 | ///
44 | [JsonProperty("rotation")]
45 | [JsonConverter(typeof(Vector4Converter))]
46 | public Vector4 Rotation { get; set; }
47 |
48 | ///
49 | /// Velocity in meters per second as v_x, v_y, v_z.
50 | ///
51 | [JsonProperty("velocity")]
52 | [JsonConverter(typeof(Vector3Converter))]
53 | public Vector3 Velocity { get; set; }
54 |
55 | ///
56 | /// Acceleration in meters per second^2 as a_x, a_y, a_z.
57 | ///
58 | [JsonProperty("acceleration")]
59 | [JsonConverter(typeof(Vector3Converter))]
60 | public Vector3 Acceleration { get; set; }
61 |
62 | ///
63 | /// List of the annotations in this capture.
64 | ///
65 | [JsonProperty("annotations")]
66 | public Annotation[] Annotations { get; set; }
67 | }
68 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/GraphicsSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!30 &1
4 | GraphicsSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 13
7 | m_Deferred:
8 | m_Mode: 1
9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
10 | m_DeferredReflections:
11 | m_Mode: 1
12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
13 | m_ScreenSpaceShadows:
14 | m_Mode: 1
15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
16 | m_LegacyDeferred:
17 | m_Mode: 1
18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0}
19 | m_DepthNormals:
20 | m_Mode: 1
21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
22 | m_MotionVectors:
23 | m_Mode: 1
24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
25 | m_LightHalo:
26 | m_Mode: 1
27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
28 | m_LensFlare:
29 | m_Mode: 1
30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
31 | m_AlwaysIncludedShaders:
32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
38 | m_PreloadedShaders: []
39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
40 | type: 0}
41 | m_CustomRenderPipeline: {fileID: 0}
42 | m_TransparencySortMode: 0
43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1}
44 | m_DefaultRenderingPath: 1
45 | m_DefaultMobileRenderingPath: 1
46 | m_TierSettings: []
47 | m_LightmapStripping: 0
48 | m_FogStripping: 0
49 | m_InstancingStripping: 0
50 | m_LightmapKeepPlain: 1
51 | m_LightmapKeepDirCombined: 1
52 | m_LightmapKeepDynamicPlain: 1
53 | m_LightmapKeepDynamicDirCombined: 1
54 | m_LightmapKeepShadowMask: 1
55 | m_LightmapKeepSubtractive: 1
56 | m_FogKeepLinear: 1
57 | m_FogKeepExp: 1
58 | m_FogKeepExp2: 1
59 | m_AlbedoSwatchInfos: []
60 | m_LightsUseLinearIntensity: 0
61 | m_LightsUseColorTemperature: 0
62 | m_LogWhenShaderIsCompiled: 0
63 | m_AllowEnlightenSupportForUpgradedProject: 0
64 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # **solo2yolo**
2 | solo2yolo is a tool that enables the conversion of SOLO datasets to YOLO format directly within the Unity editor. **Please note that this package is currently under development.**
3 |
4 | ## **About SOLO**
5 | SOLO stands for Synthetic Optimized Labeled Objects. A SOLO dataset is a combination of JSON and image files. This tool utilizes this schema, which provides a generic structure for simulation output that can be easily consumed for statistical analysis or machine learning model training.
6 |
7 | For more information about the SOLO dataset schema, refer to the **[Unity documentation](https://docs.unity3d.com/Packages/com.unity.perception@1.0/manual/Schema/SoloSchema.html)**.
8 |
9 | ## **Compatibility**
10 | solo2yolo has been tested with Unity HDRP 2021 LTS and Perception package version 1.0.0-preview.1. However, it should work with any Unity editor version that supports HDRP.
11 |
12 | ## **Installation**
13 | This project requires the **[.NET 6.0 runtime library](https://dotnet.microsoft.com/en-us/download/dotnet/6.0)** to be installed on your system.
14 |
15 | ### Using Git
16 | Before proceeding with this method, ensure you have Git installed on your system and a version of Unity that supports path query parameters for Git packages.
17 | 1. Open Unity and navigate to **Window > Package Manager**.
18 | 2. Click on the top left button with a "+" on it to add a new package. In the dropdown, select **"Add package from git URL"**.
19 | 3. Enter the following git URL: `https://github.com/z3lx/solo2yolo.git?path=src/solo2yolo-unity/Packages/solo2yolo`
20 |
21 | ### Manual Installation
22 | 1. Clone this repository to your local machine and unzip it.
23 | 2. Open Unity and navigate to **Window > Package Manager**.
24 | 3. Click on the top left button with a "+" on it to add a new package. In the dropdown, select **"Add package from disk"**.
25 | 4. Navigate to the unzipped package, and locate the **package.json** file within the **src/solo2yolo-unity/Packages/solo2yolo** directory.
26 |
27 | **Note: If you prefer to build the executable used in the unity package from source, you can find the necessary files in the solo2yolo-dotnet folder.**
28 |
29 | ## **Usage**
30 | Currently, solo2yolo only supports the conversion of BoundingBox2D annotations to YOLO format for object detection tasks. However, this tool is under development, and additional computer vision task support may be added in the future.
31 |
32 | ### Editor GUI
33 | To use solo2yolo using the editor GUI, follow these steps:
34 | 1. Navigate to **Tools > solo2yolo Converter** in the Unity editor.
35 | 2. Select the directory where your SOLO dataset is located.
36 | 3. Choose the output directory where the converted dataset will be stored.
37 | 4. Click on the **Confirm** button to start the conversion process.
38 |
39 | ### CLI
40 | You can also use solo2yolo from the command line using the following options:
41 | ```
42 | Usage:
43 | solo2yolo [-i ] [-o ] [-t ]
44 |
45 | Example:
46 | solo2yolo -i /path/to/solo_dataset -o /path/to/yolo_dataset -t detect
47 |
48 | Mandatory Flags:
49 | -i: Specifies the input path for the SOLO dataset.
50 | -o: Specifies the output path for the converted YOLO dataset.
51 | -t: Specifies the computer vision task of the converted dataset.
52 | Available options: classify, detect, segment, pose.
53 |
54 | Other Flags:
55 | -h: Displays the help page.
56 | ```
57 |
58 | Please note that the conversion process may take some time, depending on the size of your dataset. Furthermore, make sure to review the output files with a dataset viewer to ensure successful conversion.
59 |
60 | ## **Contributing**
61 | Contributions are welcome! If you encounter any issues, have suggestions, or want to contribute new features, please open an issue or submit a pull request. Your contributions help improve the tool and make it more useful for the community.
62 |
63 | ## **License**
64 | This project is licensed under the MIT License. See **[LICENSE](https://github.com/z3lx/solo2yolo/blob/main/LICENSE)** for details.
65 |
66 | If you find solo2yolo helpful, please consider giving this repository a star. Your support is highly appreciated! ⭐️
67 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/solo2yolo/Editor/DatasetConverterWindow.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using UnityEditor;
4 | using UnityEngine;
5 |
6 | namespace z3lx.solo2yolo
7 | {
8 | internal class DatasetConverterWindow : EditorWindow
9 | {
10 | private static readonly string _windowTitle = "Converter";
11 | private Texture2D _folderIcon;
12 |
13 | private readonly Vector2 _margins = new Vector2(4, 4);
14 | private readonly float _lineHeight = 24;
15 | private readonly float _buttonHeight = 20;
16 | private readonly float _labelWidth = 144;
17 | private readonly float _buttonWidth = 96;
18 | private readonly float _iconWidth = 24;
19 |
20 | private enum ComputerVisionTask
21 | {
22 | Classify,
23 | Detect,
24 | Segment,
25 | Pose
26 | }
27 |
28 | private string _soloPath;
29 | private string _yoloPath;
30 | private ComputerVisionTask _task;
31 |
32 | [MenuItem("Tools/solo2yolo Converter")]
33 | private static void ShowWindow()
34 | {
35 | DatasetConverterWindow window = GetWindow();
36 | window.Initialize();
37 | }
38 |
39 | private void Initialize()
40 | {
41 | titleContent = new GUIContent(_windowTitle);
42 | minSize = new Vector2((2 * _margins.x) + _labelWidth + _iconWidth + 384 + _buttonWidth,
43 | (2 * _margins.y) + (3 * _lineHeight) + _buttonHeight);
44 | _folderIcon = EditorGUIUtility.FindTexture("d_FolderOpened Icon");
45 |
46 | string defaultPath = Path.Combine(Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName,
47 | "LocalLow", PlayerSettings.companyName, PlayerSettings.productName);
48 |
49 | _soloPath = Path.Combine(defaultPath, "solo");
50 | _yoloPath = defaultPath;
51 | _task = ComputerVisionTask.Detect;
52 | }
53 |
54 | private void OnGUI()
55 | {
56 | Rect contentRect = new Rect(_margins.x, _margins.y,
57 | position.width - (2 * _margins.x), position.height - (2 * _margins.y));
58 | GUILayout.BeginArea(contentRect);
59 |
60 | RectLayout layout = new RectLayout()
61 | {
62 | lineHeight = _lineHeight,
63 | contentRect = contentRect
64 | };
65 |
66 | DrawPathInput(layout, "SOLO directory", ref _soloPath);
67 | DrawPathInput(layout, "YOLO directory", ref _yoloPath);
68 | DrawTaskInput(layout, "YOLO task");
69 | DrawConfirmButton(layout);
70 |
71 | GUILayout.EndArea();
72 | }
73 |
74 | private void DrawPathInput(RectLayout layout, string label, ref string path)
75 | {
76 | GUI.Label(layout.GetNextRect(_labelWidth), label);
77 | GUI.Label(layout.GetNextRect(_iconWidth), _folderIcon);
78 | GUI.Label(layout.GetNextRect(layout.contentRect.width - _labelWidth - _iconWidth - _buttonWidth), path);
79 | if (GUI.Button(layout.GetNextRect(_buttonWidth, _buttonHeight), "Choose Folder"))
80 | {
81 | string input = EditorUtility.OpenFolderPanel($"Select {label}", path, "");
82 | path = string.IsNullOrEmpty(input) ? path : input.Replace('/', Path.DirectorySeparatorChar);
83 | }
84 | layout.NewLine();
85 | }
86 |
87 | private void DrawTaskInput(RectLayout layout, string label)
88 | {
89 | GUI.Label(layout.GetNextRect(_labelWidth), label);
90 | EditorGUI.BeginDisabledGroup(true);
91 | Rect taskRect = layout.GetNextRect(layout.contentRect.width - _labelWidth, EditorStyles.popup.fixedHeight);
92 | _task = (ComputerVisionTask)EditorGUI.EnumPopup(taskRect, _task);
93 | EditorGUI.EndDisabledGroup();
94 | layout.NewLine();
95 | }
96 |
97 | private void DrawConfirmButton(RectLayout layout)
98 | {
99 | Rect confirmButtonRect = new Rect(layout.contentRect.width - _buttonWidth,
100 | layout.contentRect.height - _buttonHeight, _buttonWidth, _buttonHeight);
101 | if (!GUI.Button(confirmButtonRect, "Confirm"))
102 | return;
103 |
104 | string path = Path.GetFullPath(Path.Combine("Packages", "com.z3lx.solo2yolo", "Runtime"));
105 | switch (Application.platform)
106 | {
107 | case RuntimePlatform.WindowsEditor:
108 | path = Path.Combine(path, "solo2yolo-win-x64.exe");
109 | break;
110 |
111 | case RuntimePlatform.OSXEditor:
112 | path = Path.Combine(path, "solo2yolo-osx-x64");
113 | break;
114 |
115 | case RuntimePlatform.LinuxEditor:
116 | path = Path.Combine(path, "solo2yolo-linux-x64");
117 | break;
118 |
119 | default:
120 | throw new PlatformNotSupportedException("Unsupported platform.");
121 | }
122 | System.Diagnostics.Process.Start(path, $"-i {_soloPath} -o {_yoloPath} -t {_task} --unity-editor");
123 | }
124 | }
125 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/SceneTemplateSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "templatePinStates": [],
3 | "dependencyTypeInfos": [
4 | {
5 | "userAdded": false,
6 | "type": "UnityEngine.AnimationClip",
7 | "ignore": false,
8 | "defaultInstantiationMode": 0,
9 | "supportsModification": true
10 | },
11 | {
12 | "userAdded": false,
13 | "type": "UnityEditor.Animations.AnimatorController",
14 | "ignore": false,
15 | "defaultInstantiationMode": 0,
16 | "supportsModification": true
17 | },
18 | {
19 | "userAdded": false,
20 | "type": "UnityEngine.AnimatorOverrideController",
21 | "ignore": false,
22 | "defaultInstantiationMode": 0,
23 | "supportsModification": true
24 | },
25 | {
26 | "userAdded": false,
27 | "type": "UnityEditor.Audio.AudioMixerController",
28 | "ignore": false,
29 | "defaultInstantiationMode": 0,
30 | "supportsModification": true
31 | },
32 | {
33 | "userAdded": false,
34 | "type": "UnityEngine.ComputeShader",
35 | "ignore": true,
36 | "defaultInstantiationMode": 1,
37 | "supportsModification": true
38 | },
39 | {
40 | "userAdded": false,
41 | "type": "UnityEngine.Cubemap",
42 | "ignore": false,
43 | "defaultInstantiationMode": 0,
44 | "supportsModification": true
45 | },
46 | {
47 | "userAdded": false,
48 | "type": "UnityEngine.GameObject",
49 | "ignore": false,
50 | "defaultInstantiationMode": 0,
51 | "supportsModification": true
52 | },
53 | {
54 | "userAdded": false,
55 | "type": "UnityEditor.LightingDataAsset",
56 | "ignore": false,
57 | "defaultInstantiationMode": 0,
58 | "supportsModification": false
59 | },
60 | {
61 | "userAdded": false,
62 | "type": "UnityEngine.LightingSettings",
63 | "ignore": false,
64 | "defaultInstantiationMode": 0,
65 | "supportsModification": true
66 | },
67 | {
68 | "userAdded": false,
69 | "type": "UnityEngine.Material",
70 | "ignore": false,
71 | "defaultInstantiationMode": 0,
72 | "supportsModification": true
73 | },
74 | {
75 | "userAdded": false,
76 | "type": "UnityEditor.MonoScript",
77 | "ignore": true,
78 | "defaultInstantiationMode": 1,
79 | "supportsModification": true
80 | },
81 | {
82 | "userAdded": false,
83 | "type": "UnityEngine.PhysicMaterial",
84 | "ignore": false,
85 | "defaultInstantiationMode": 0,
86 | "supportsModification": true
87 | },
88 | {
89 | "userAdded": false,
90 | "type": "UnityEngine.PhysicsMaterial2D",
91 | "ignore": false,
92 | "defaultInstantiationMode": 0,
93 | "supportsModification": true
94 | },
95 | {
96 | "userAdded": false,
97 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile",
98 | "ignore": false,
99 | "defaultInstantiationMode": 0,
100 | "supportsModification": true
101 | },
102 | {
103 | "userAdded": false,
104 | "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources",
105 | "ignore": false,
106 | "defaultInstantiationMode": 0,
107 | "supportsModification": true
108 | },
109 | {
110 | "userAdded": false,
111 | "type": "UnityEngine.Rendering.VolumeProfile",
112 | "ignore": false,
113 | "defaultInstantiationMode": 0,
114 | "supportsModification": true
115 | },
116 | {
117 | "userAdded": false,
118 | "type": "UnityEditor.SceneAsset",
119 | "ignore": false,
120 | "defaultInstantiationMode": 0,
121 | "supportsModification": false
122 | },
123 | {
124 | "userAdded": false,
125 | "type": "UnityEngine.Shader",
126 | "ignore": true,
127 | "defaultInstantiationMode": 1,
128 | "supportsModification": true
129 | },
130 | {
131 | "userAdded": false,
132 | "type": "UnityEngine.ShaderVariantCollection",
133 | "ignore": true,
134 | "defaultInstantiationMode": 1,
135 | "supportsModification": true
136 | },
137 | {
138 | "userAdded": false,
139 | "type": "UnityEngine.Texture",
140 | "ignore": false,
141 | "defaultInstantiationMode": 0,
142 | "supportsModification": true
143 | },
144 | {
145 | "userAdded": false,
146 | "type": "UnityEngine.Texture2D",
147 | "ignore": false,
148 | "defaultInstantiationMode": 0,
149 | "supportsModification": true
150 | },
151 | {
152 | "userAdded": false,
153 | "type": "UnityEngine.Timeline.TimelineAsset",
154 | "ignore": false,
155 | "defaultInstantiationMode": 0,
156 | "supportsModification": true
157 | }
158 | ],
159 | "defaultDependencyTypeInfo": {
160 | "userAdded": false,
161 | "type": "",
162 | "ignore": false,
163 | "defaultInstantiationMode": 1,
164 | "supportsModification": true
165 | },
166 | "newSceneOverride": 0
167 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/InputManager.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!13 &1
4 | InputManager:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_Axes:
8 | - serializedVersion: 3
9 | m_Name: Horizontal
10 | descriptiveName:
11 | descriptiveNegativeName:
12 | negativeButton: left
13 | positiveButton: right
14 | altNegativeButton: a
15 | altPositiveButton: d
16 | gravity: 3
17 | dead: 0.001
18 | sensitivity: 3
19 | snap: 1
20 | invert: 0
21 | type: 0
22 | axis: 0
23 | joyNum: 0
24 | - serializedVersion: 3
25 | m_Name: Vertical
26 | descriptiveName:
27 | descriptiveNegativeName:
28 | negativeButton: down
29 | positiveButton: up
30 | altNegativeButton: s
31 | altPositiveButton: w
32 | gravity: 3
33 | dead: 0.001
34 | sensitivity: 3
35 | snap: 1
36 | invert: 0
37 | type: 0
38 | axis: 0
39 | joyNum: 0
40 | - serializedVersion: 3
41 | m_Name: Fire1
42 | descriptiveName:
43 | descriptiveNegativeName:
44 | negativeButton:
45 | positiveButton: left ctrl
46 | altNegativeButton:
47 | altPositiveButton: mouse 0
48 | gravity: 1000
49 | dead: 0.001
50 | sensitivity: 1000
51 | snap: 0
52 | invert: 0
53 | type: 0
54 | axis: 0
55 | joyNum: 0
56 | - serializedVersion: 3
57 | m_Name: Fire2
58 | descriptiveName:
59 | descriptiveNegativeName:
60 | negativeButton:
61 | positiveButton: left alt
62 | altNegativeButton:
63 | altPositiveButton: mouse 1
64 | gravity: 1000
65 | dead: 0.001
66 | sensitivity: 1000
67 | snap: 0
68 | invert: 0
69 | type: 0
70 | axis: 0
71 | joyNum: 0
72 | - serializedVersion: 3
73 | m_Name: Fire3
74 | descriptiveName:
75 | descriptiveNegativeName:
76 | negativeButton:
77 | positiveButton: left shift
78 | altNegativeButton:
79 | altPositiveButton: mouse 2
80 | gravity: 1000
81 | dead: 0.001
82 | sensitivity: 1000
83 | snap: 0
84 | invert: 0
85 | type: 0
86 | axis: 0
87 | joyNum: 0
88 | - serializedVersion: 3
89 | m_Name: Jump
90 | descriptiveName:
91 | descriptiveNegativeName:
92 | negativeButton:
93 | positiveButton: space
94 | altNegativeButton:
95 | altPositiveButton:
96 | gravity: 1000
97 | dead: 0.001
98 | sensitivity: 1000
99 | snap: 0
100 | invert: 0
101 | type: 0
102 | axis: 0
103 | joyNum: 0
104 | - serializedVersion: 3
105 | m_Name: Mouse X
106 | descriptiveName:
107 | descriptiveNegativeName:
108 | negativeButton:
109 | positiveButton:
110 | altNegativeButton:
111 | altPositiveButton:
112 | gravity: 0
113 | dead: 0
114 | sensitivity: 0.1
115 | snap: 0
116 | invert: 0
117 | type: 1
118 | axis: 0
119 | joyNum: 0
120 | - serializedVersion: 3
121 | m_Name: Mouse Y
122 | descriptiveName:
123 | descriptiveNegativeName:
124 | negativeButton:
125 | positiveButton:
126 | altNegativeButton:
127 | altPositiveButton:
128 | gravity: 0
129 | dead: 0
130 | sensitivity: 0.1
131 | snap: 0
132 | invert: 0
133 | type: 1
134 | axis: 1
135 | joyNum: 0
136 | - serializedVersion: 3
137 | m_Name: Mouse ScrollWheel
138 | descriptiveName:
139 | descriptiveNegativeName:
140 | negativeButton:
141 | positiveButton:
142 | altNegativeButton:
143 | altPositiveButton:
144 | gravity: 0
145 | dead: 0
146 | sensitivity: 0.1
147 | snap: 0
148 | invert: 0
149 | type: 1
150 | axis: 2
151 | joyNum: 0
152 | - serializedVersion: 3
153 | m_Name: Horizontal
154 | descriptiveName:
155 | descriptiveNegativeName:
156 | negativeButton:
157 | positiveButton:
158 | altNegativeButton:
159 | altPositiveButton:
160 | gravity: 0
161 | dead: 0.19
162 | sensitivity: 1
163 | snap: 0
164 | invert: 0
165 | type: 2
166 | axis: 0
167 | joyNum: 0
168 | - serializedVersion: 3
169 | m_Name: Vertical
170 | descriptiveName:
171 | descriptiveNegativeName:
172 | negativeButton:
173 | positiveButton:
174 | altNegativeButton:
175 | altPositiveButton:
176 | gravity: 0
177 | dead: 0.19
178 | sensitivity: 1
179 | snap: 0
180 | invert: 1
181 | type: 2
182 | axis: 1
183 | joyNum: 0
184 | - serializedVersion: 3
185 | m_Name: Fire1
186 | descriptiveName:
187 | descriptiveNegativeName:
188 | negativeButton:
189 | positiveButton: joystick button 0
190 | altNegativeButton:
191 | altPositiveButton:
192 | gravity: 1000
193 | dead: 0.001
194 | sensitivity: 1000
195 | snap: 0
196 | invert: 0
197 | type: 0
198 | axis: 0
199 | joyNum: 0
200 | - serializedVersion: 3
201 | m_Name: Fire2
202 | descriptiveName:
203 | descriptiveNegativeName:
204 | negativeButton:
205 | positiveButton: joystick button 1
206 | altNegativeButton:
207 | altPositiveButton:
208 | gravity: 1000
209 | dead: 0.001
210 | sensitivity: 1000
211 | snap: 0
212 | invert: 0
213 | type: 0
214 | axis: 0
215 | joyNum: 0
216 | - serializedVersion: 3
217 | m_Name: Fire3
218 | descriptiveName:
219 | descriptiveNegativeName:
220 | negativeButton:
221 | positiveButton: joystick button 2
222 | altNegativeButton:
223 | altPositiveButton:
224 | gravity: 1000
225 | dead: 0.001
226 | sensitivity: 1000
227 | snap: 0
228 | invert: 0
229 | type: 0
230 | axis: 0
231 | joyNum: 0
232 | - serializedVersion: 3
233 | m_Name: Jump
234 | descriptiveName:
235 | descriptiveNegativeName:
236 | negativeButton:
237 | positiveButton: joystick button 3
238 | altNegativeButton:
239 | altPositiveButton:
240 | gravity: 1000
241 | dead: 0.001
242 | sensitivity: 1000
243 | snap: 0
244 | invert: 0
245 | type: 0
246 | axis: 0
247 | joyNum: 0
248 | - serializedVersion: 3
249 | m_Name: Submit
250 | descriptiveName:
251 | descriptiveNegativeName:
252 | negativeButton:
253 | positiveButton: return
254 | altNegativeButton:
255 | altPositiveButton: joystick button 0
256 | gravity: 1000
257 | dead: 0.001
258 | sensitivity: 1000
259 | snap: 0
260 | invert: 0
261 | type: 0
262 | axis: 0
263 | joyNum: 0
264 | - serializedVersion: 3
265 | m_Name: Submit
266 | descriptiveName:
267 | descriptiveNegativeName:
268 | negativeButton:
269 | positiveButton: enter
270 | altNegativeButton:
271 | altPositiveButton: space
272 | gravity: 1000
273 | dead: 0.001
274 | sensitivity: 1000
275 | snap: 0
276 | invert: 0
277 | type: 0
278 | axis: 0
279 | joyNum: 0
280 | - serializedVersion: 3
281 | m_Name: Cancel
282 | descriptiveName:
283 | descriptiveNegativeName:
284 | negativeButton:
285 | positiveButton: escape
286 | altNegativeButton:
287 | altPositiveButton: joystick button 1
288 | gravity: 1000
289 | dead: 0.001
290 | sensitivity: 1000
291 | snap: 0
292 | invert: 0
293 | type: 0
294 | axis: 0
295 | joyNum: 0
296 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/QualitySettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!47 &1
4 | QualitySettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 5
7 | m_CurrentQuality: 5
8 | m_QualitySettings:
9 | - serializedVersion: 2
10 | name: Very Low
11 | pixelLightCount: 0
12 | shadows: 0
13 | shadowResolution: 0
14 | shadowProjection: 1
15 | shadowCascades: 1
16 | shadowDistance: 15
17 | shadowNearPlaneOffset: 3
18 | shadowCascade2Split: 0.33333334
19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
20 | shadowmaskMode: 0
21 | blendWeights: 1
22 | textureQuality: 1
23 | anisotropicTextures: 0
24 | antiAliasing: 0
25 | softParticles: 0
26 | softVegetation: 0
27 | realtimeReflectionProbes: 0
28 | billboardsFaceCameraPosition: 0
29 | vSyncCount: 0
30 | lodBias: 0.3
31 | maximumLODLevel: 0
32 | streamingMipmapsActive: 0
33 | streamingMipmapsAddAllCameras: 1
34 | streamingMipmapsMemoryBudget: 512
35 | streamingMipmapsRenderersPerFrame: 512
36 | streamingMipmapsMaxLevelReduction: 2
37 | streamingMipmapsMaxFileIORequests: 1024
38 | particleRaycastBudget: 4
39 | asyncUploadTimeSlice: 2
40 | asyncUploadBufferSize: 16
41 | asyncUploadPersistentBuffer: 1
42 | resolutionScalingFixedDPIFactor: 1
43 | excludedTargetPlatforms: []
44 | - serializedVersion: 2
45 | name: Low
46 | pixelLightCount: 0
47 | shadows: 0
48 | shadowResolution: 0
49 | shadowProjection: 1
50 | shadowCascades: 1
51 | shadowDistance: 20
52 | shadowNearPlaneOffset: 3
53 | shadowCascade2Split: 0.33333334
54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
55 | shadowmaskMode: 0
56 | blendWeights: 2
57 | textureQuality: 0
58 | anisotropicTextures: 0
59 | antiAliasing: 0
60 | softParticles: 0
61 | softVegetation: 0
62 | realtimeReflectionProbes: 0
63 | billboardsFaceCameraPosition: 0
64 | vSyncCount: 0
65 | lodBias: 0.4
66 | maximumLODLevel: 0
67 | streamingMipmapsActive: 0
68 | streamingMipmapsAddAllCameras: 1
69 | streamingMipmapsMemoryBudget: 512
70 | streamingMipmapsRenderersPerFrame: 512
71 | streamingMipmapsMaxLevelReduction: 2
72 | streamingMipmapsMaxFileIORequests: 1024
73 | particleRaycastBudget: 16
74 | asyncUploadTimeSlice: 2
75 | asyncUploadBufferSize: 16
76 | asyncUploadPersistentBuffer: 1
77 | resolutionScalingFixedDPIFactor: 1
78 | excludedTargetPlatforms: []
79 | - serializedVersion: 2
80 | name: Medium
81 | pixelLightCount: 1
82 | shadows: 1
83 | shadowResolution: 0
84 | shadowProjection: 1
85 | shadowCascades: 1
86 | shadowDistance: 20
87 | shadowNearPlaneOffset: 3
88 | shadowCascade2Split: 0.33333334
89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
90 | shadowmaskMode: 0
91 | blendWeights: 2
92 | textureQuality: 0
93 | anisotropicTextures: 1
94 | antiAliasing: 0
95 | softParticles: 0
96 | softVegetation: 0
97 | realtimeReflectionProbes: 0
98 | billboardsFaceCameraPosition: 0
99 | vSyncCount: 1
100 | lodBias: 0.7
101 | maximumLODLevel: 0
102 | streamingMipmapsActive: 0
103 | streamingMipmapsAddAllCameras: 1
104 | streamingMipmapsMemoryBudget: 512
105 | streamingMipmapsRenderersPerFrame: 512
106 | streamingMipmapsMaxLevelReduction: 2
107 | streamingMipmapsMaxFileIORequests: 1024
108 | particleRaycastBudget: 64
109 | asyncUploadTimeSlice: 2
110 | asyncUploadBufferSize: 16
111 | asyncUploadPersistentBuffer: 1
112 | resolutionScalingFixedDPIFactor: 1
113 | excludedTargetPlatforms: []
114 | - serializedVersion: 2
115 | name: High
116 | pixelLightCount: 2
117 | shadows: 2
118 | shadowResolution: 1
119 | shadowProjection: 1
120 | shadowCascades: 2
121 | shadowDistance: 40
122 | shadowNearPlaneOffset: 3
123 | shadowCascade2Split: 0.33333334
124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
125 | shadowmaskMode: 1
126 | blendWeights: 2
127 | textureQuality: 0
128 | anisotropicTextures: 1
129 | antiAliasing: 0
130 | softParticles: 0
131 | softVegetation: 1
132 | realtimeReflectionProbes: 1
133 | billboardsFaceCameraPosition: 1
134 | vSyncCount: 1
135 | lodBias: 1
136 | maximumLODLevel: 0
137 | streamingMipmapsActive: 0
138 | streamingMipmapsAddAllCameras: 1
139 | streamingMipmapsMemoryBudget: 512
140 | streamingMipmapsRenderersPerFrame: 512
141 | streamingMipmapsMaxLevelReduction: 2
142 | streamingMipmapsMaxFileIORequests: 1024
143 | particleRaycastBudget: 256
144 | asyncUploadTimeSlice: 2
145 | asyncUploadBufferSize: 16
146 | asyncUploadPersistentBuffer: 1
147 | resolutionScalingFixedDPIFactor: 1
148 | excludedTargetPlatforms: []
149 | - serializedVersion: 2
150 | name: Very High
151 | pixelLightCount: 3
152 | shadows: 2
153 | shadowResolution: 2
154 | shadowProjection: 1
155 | shadowCascades: 2
156 | shadowDistance: 70
157 | shadowNearPlaneOffset: 3
158 | shadowCascade2Split: 0.33333334
159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
160 | shadowmaskMode: 1
161 | blendWeights: 4
162 | textureQuality: 0
163 | anisotropicTextures: 2
164 | antiAliasing: 2
165 | softParticles: 1
166 | softVegetation: 1
167 | realtimeReflectionProbes: 1
168 | billboardsFaceCameraPosition: 1
169 | vSyncCount: 1
170 | lodBias: 1.5
171 | maximumLODLevel: 0
172 | streamingMipmapsActive: 0
173 | streamingMipmapsAddAllCameras: 1
174 | streamingMipmapsMemoryBudget: 512
175 | streamingMipmapsRenderersPerFrame: 512
176 | streamingMipmapsMaxLevelReduction: 2
177 | streamingMipmapsMaxFileIORequests: 1024
178 | particleRaycastBudget: 1024
179 | asyncUploadTimeSlice: 2
180 | asyncUploadBufferSize: 16
181 | asyncUploadPersistentBuffer: 1
182 | resolutionScalingFixedDPIFactor: 1
183 | excludedTargetPlatforms: []
184 | - serializedVersion: 2
185 | name: Ultra
186 | pixelLightCount: 4
187 | shadows: 2
188 | shadowResolution: 2
189 | shadowProjection: 1
190 | shadowCascades: 4
191 | shadowDistance: 150
192 | shadowNearPlaneOffset: 3
193 | shadowCascade2Split: 0.33333334
194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
195 | shadowmaskMode: 1
196 | blendWeights: 4
197 | textureQuality: 0
198 | anisotropicTextures: 2
199 | antiAliasing: 2
200 | softParticles: 1
201 | softVegetation: 1
202 | realtimeReflectionProbes: 1
203 | billboardsFaceCameraPosition: 1
204 | vSyncCount: 1
205 | lodBias: 2
206 | maximumLODLevel: 0
207 | streamingMipmapsActive: 0
208 | streamingMipmapsAddAllCameras: 1
209 | streamingMipmapsMemoryBudget: 512
210 | streamingMipmapsRenderersPerFrame: 512
211 | streamingMipmapsMaxLevelReduction: 2
212 | streamingMipmapsMaxFileIORequests: 1024
213 | particleRaycastBudget: 4096
214 | asyncUploadTimeSlice: 2
215 | asyncUploadBufferSize: 16
216 | asyncUploadPersistentBuffer: 1
217 | resolutionScalingFixedDPIFactor: 1
218 | excludedTargetPlatforms: []
219 | m_PerPlatformDefaultQuality:
220 | Android: 2
221 | Lumin: 5
222 | Nintendo 3DS: 5
223 | Nintendo Switch: 5
224 | PS4: 5
225 | PSP2: 2
226 | Stadia: 5
227 | Standalone: 5
228 | WebGL: 3
229 | Windows Store Apps: 5
230 | XboxOne: 5
231 | iPhone: 2
232 | tvOS: 2
233 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Assets/Scenes/SampleScene.unity:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!29 &1
4 | OcclusionCullingSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 2
7 | m_OcclusionBakeSettings:
8 | smallestOccluder: 5
9 | smallestHole: 0.25
10 | backfaceThreshold: 100
11 | m_SceneGUID: 00000000000000000000000000000000
12 | m_OcclusionCullingData: {fileID: 0}
13 | --- !u!104 &2
14 | RenderSettings:
15 | m_ObjectHideFlags: 0
16 | serializedVersion: 9
17 | m_Fog: 0
18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
19 | m_FogMode: 3
20 | m_FogDensity: 0.01
21 | m_LinearFogStart: 0
22 | m_LinearFogEnd: 300
23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
26 | m_AmbientIntensity: 1
27 | m_AmbientMode: 0
28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
30 | m_HaloStrength: 0.5
31 | m_FlareStrength: 1
32 | m_FlareFadeSpeed: 3
33 | m_HaloTexture: {fileID: 0}
34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
35 | m_DefaultReflectionMode: 0
36 | m_DefaultReflectionResolution: 128
37 | m_ReflectionBounces: 1
38 | m_ReflectionIntensity: 1
39 | m_CustomReflection: {fileID: 0}
40 | m_Sun: {fileID: 705507994}
41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
42 | m_UseRadianceAmbientProbe: 0
43 | --- !u!157 &3
44 | LightmapSettings:
45 | m_ObjectHideFlags: 0
46 | serializedVersion: 12
47 | m_GIWorkflowMode: 1
48 | m_GISettings:
49 | serializedVersion: 2
50 | m_BounceScale: 1
51 | m_IndirectOutputScale: 1
52 | m_AlbedoBoost: 1
53 | m_EnvironmentLightingMode: 0
54 | m_EnableBakedLightmaps: 1
55 | m_EnableRealtimeLightmaps: 0
56 | m_LightmapEditorSettings:
57 | serializedVersion: 12
58 | m_Resolution: 2
59 | m_BakeResolution: 40
60 | m_AtlasSize: 1024
61 | m_AO: 0
62 | m_AOMaxDistance: 1
63 | m_CompAOExponent: 1
64 | m_CompAOExponentDirect: 0
65 | m_ExtractAmbientOcclusion: 0
66 | m_Padding: 2
67 | m_LightmapParameters: {fileID: 0}
68 | m_LightmapsBakeMode: 1
69 | m_TextureCompression: 1
70 | m_FinalGather: 0
71 | m_FinalGatherFiltering: 1
72 | m_FinalGatherRayCount: 256
73 | m_ReflectionCompression: 2
74 | m_MixedBakeMode: 2
75 | m_BakeBackend: 1
76 | m_PVRSampling: 1
77 | m_PVRDirectSampleCount: 32
78 | m_PVRSampleCount: 500
79 | m_PVRBounces: 2
80 | m_PVREnvironmentSampleCount: 500
81 | m_PVREnvironmentReferencePointCount: 2048
82 | m_PVRFilteringMode: 2
83 | m_PVRDenoiserTypeDirect: 0
84 | m_PVRDenoiserTypeIndirect: 0
85 | m_PVRDenoiserTypeAO: 0
86 | m_PVRFilterTypeDirect: 0
87 | m_PVRFilterTypeIndirect: 0
88 | m_PVRFilterTypeAO: 0
89 | m_PVREnvironmentMIS: 0
90 | m_PVRCulling: 1
91 | m_PVRFilteringGaussRadiusDirect: 1
92 | m_PVRFilteringGaussRadiusIndirect: 5
93 | m_PVRFilteringGaussRadiusAO: 2
94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5
95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2
96 | m_PVRFilteringAtrousPositionSigmaAO: 1
97 | m_ExportTrainingData: 0
98 | m_TrainingDataDestination: TrainingData
99 | m_LightProbeSampleCountMultiplier: 4
100 | m_LightingDataAsset: {fileID: 0}
101 | m_LightingSettings: {fileID: 0}
102 | --- !u!196 &4
103 | NavMeshSettings:
104 | serializedVersion: 2
105 | m_ObjectHideFlags: 0
106 | m_BuildSettings:
107 | serializedVersion: 2
108 | agentTypeID: 0
109 | agentRadius: 0.5
110 | agentHeight: 2
111 | agentSlope: 45
112 | agentClimb: 0.4
113 | ledgeDropHeight: 0
114 | maxJumpAcrossDistance: 0
115 | minRegionArea: 2
116 | manualCellSize: 0
117 | cellSize: 0.16666667
118 | manualTileSize: 0
119 | tileSize: 256
120 | accuratePlacement: 0
121 | debug:
122 | m_Flags: 0
123 | m_NavMeshData: {fileID: 0}
124 | --- !u!1 &705507993
125 | GameObject:
126 | m_ObjectHideFlags: 0
127 | m_CorrespondingSourceObject: {fileID: 0}
128 | m_PrefabInternal: {fileID: 0}
129 | serializedVersion: 6
130 | m_Component:
131 | - component: {fileID: 705507995}
132 | - component: {fileID: 705507994}
133 | m_Layer: 0
134 | m_Name: Directional Light
135 | m_TagString: Untagged
136 | m_Icon: {fileID: 0}
137 | m_NavMeshLayer: 0
138 | m_StaticEditorFlags: 0
139 | m_IsActive: 1
140 | --- !u!108 &705507994
141 | Light:
142 | m_ObjectHideFlags: 0
143 | m_CorrespondingSourceObject: {fileID: 0}
144 | m_PrefabInternal: {fileID: 0}
145 | m_GameObject: {fileID: 705507993}
146 | m_Enabled: 1
147 | serializedVersion: 8
148 | m_Type: 1
149 | m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
150 | m_Intensity: 1
151 | m_Range: 10
152 | m_SpotAngle: 30
153 | m_CookieSize: 10
154 | m_Shadows:
155 | m_Type: 2
156 | m_Resolution: -1
157 | m_CustomResolution: -1
158 | m_Strength: 1
159 | m_Bias: 0.05
160 | m_NormalBias: 0.4
161 | m_NearPlane: 0.2
162 | m_Cookie: {fileID: 0}
163 | m_DrawHalo: 0
164 | m_Flare: {fileID: 0}
165 | m_RenderMode: 0
166 | m_CullingMask:
167 | serializedVersion: 2
168 | m_Bits: 4294967295
169 | m_Lightmapping: 1
170 | m_LightShadowCasterMode: 0
171 | m_AreaSize: {x: 1, y: 1}
172 | m_BounceIntensity: 1
173 | m_ColorTemperature: 6570
174 | m_UseColorTemperature: 0
175 | m_ShadowRadius: 0
176 | m_ShadowAngle: 0
177 | --- !u!4 &705507995
178 | Transform:
179 | m_ObjectHideFlags: 0
180 | m_CorrespondingSourceObject: {fileID: 0}
181 | m_PrefabInternal: {fileID: 0}
182 | m_GameObject: {fileID: 705507993}
183 | m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
184 | m_LocalPosition: {x: 0, y: 3, z: 0}
185 | m_LocalScale: {x: 1, y: 1, z: 1}
186 | m_Children: []
187 | m_Father: {fileID: 0}
188 | m_RootOrder: 1
189 | m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
190 | --- !u!1 &963194225
191 | GameObject:
192 | m_ObjectHideFlags: 0
193 | m_CorrespondingSourceObject: {fileID: 0}
194 | m_PrefabInternal: {fileID: 0}
195 | serializedVersion: 6
196 | m_Component:
197 | - component: {fileID: 963194228}
198 | - component: {fileID: 963194227}
199 | - component: {fileID: 963194226}
200 | m_Layer: 0
201 | m_Name: Main Camera
202 | m_TagString: MainCamera
203 | m_Icon: {fileID: 0}
204 | m_NavMeshLayer: 0
205 | m_StaticEditorFlags: 0
206 | m_IsActive: 1
207 | --- !u!81 &963194226
208 | AudioListener:
209 | m_ObjectHideFlags: 0
210 | m_CorrespondingSourceObject: {fileID: 0}
211 | m_PrefabInternal: {fileID: 0}
212 | m_GameObject: {fileID: 963194225}
213 | m_Enabled: 1
214 | --- !u!20 &963194227
215 | Camera:
216 | m_ObjectHideFlags: 0
217 | m_CorrespondingSourceObject: {fileID: 0}
218 | m_PrefabInternal: {fileID: 0}
219 | m_GameObject: {fileID: 963194225}
220 | m_Enabled: 1
221 | serializedVersion: 2
222 | m_ClearFlags: 1
223 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
224 | m_projectionMatrixMode: 1
225 | m_SensorSize: {x: 36, y: 24}
226 | m_LensShift: {x: 0, y: 0}
227 | m_GateFitMode: 2
228 | m_FocalLength: 50
229 | m_NormalizedViewPortRect:
230 | serializedVersion: 2
231 | x: 0
232 | y: 0
233 | width: 1
234 | height: 1
235 | near clip plane: 0.3
236 | far clip plane: 1000
237 | field of view: 60
238 | orthographic: 0
239 | orthographic size: 5
240 | m_Depth: -1
241 | m_CullingMask:
242 | serializedVersion: 2
243 | m_Bits: 4294967295
244 | m_RenderingPath: -1
245 | m_TargetTexture: {fileID: 0}
246 | m_TargetDisplay: 0
247 | m_TargetEye: 3
248 | m_HDR: 1
249 | m_AllowMSAA: 1
250 | m_AllowDynamicResolution: 0
251 | m_ForceIntoRT: 0
252 | m_OcclusionCulling: 1
253 | m_StereoConvergence: 10
254 | m_StereoSeparation: 0.022
255 | --- !u!4 &963194228
256 | Transform:
257 | m_ObjectHideFlags: 0
258 | m_CorrespondingSourceObject: {fileID: 0}
259 | m_PrefabInternal: {fileID: 0}
260 | m_GameObject: {fileID: 963194225}
261 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
262 | m_LocalPosition: {x: 0, y: 1, z: -10}
263 | m_LocalScale: {x: 1, y: 1, z: 1}
264 | m_Children: []
265 | m_Father: {fileID: 0}
266 | m_RootOrder: 0
267 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
268 |
--------------------------------------------------------------------------------
/src/solo2yolo-unity/Packages/packages-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "com.unity.ext.nunit": {
4 | "version": "1.0.6",
5 | "depth": 2,
6 | "source": "registry",
7 | "dependencies": {},
8 | "url": "https://packages.unity.com"
9 | },
10 | "com.unity.ide.visualstudio": {
11 | "version": "2.0.18",
12 | "depth": 0,
13 | "source": "registry",
14 | "dependencies": {
15 | "com.unity.test-framework": "1.1.9"
16 | },
17 | "url": "https://packages.unity.com"
18 | },
19 | "com.unity.test-framework": {
20 | "version": "1.1.33",
21 | "depth": 1,
22 | "source": "registry",
23 | "dependencies": {
24 | "com.unity.ext.nunit": "1.0.6",
25 | "com.unity.modules.imgui": "1.0.0",
26 | "com.unity.modules.jsonserialize": "1.0.0"
27 | },
28 | "url": "https://packages.unity.com"
29 | },
30 | "com.z3lx.solo2yolo": {
31 | "version": "file:solo2yolo",
32 | "depth": 0,
33 | "source": "embedded",
34 | "dependencies": {}
35 | },
36 | "com.unity.modules.ai": {
37 | "version": "1.0.0",
38 | "depth": 0,
39 | "source": "builtin",
40 | "dependencies": {}
41 | },
42 | "com.unity.modules.androidjni": {
43 | "version": "1.0.0",
44 | "depth": 0,
45 | "source": "builtin",
46 | "dependencies": {}
47 | },
48 | "com.unity.modules.animation": {
49 | "version": "1.0.0",
50 | "depth": 0,
51 | "source": "builtin",
52 | "dependencies": {}
53 | },
54 | "com.unity.modules.assetbundle": {
55 | "version": "1.0.0",
56 | "depth": 0,
57 | "source": "builtin",
58 | "dependencies": {}
59 | },
60 | "com.unity.modules.audio": {
61 | "version": "1.0.0",
62 | "depth": 0,
63 | "source": "builtin",
64 | "dependencies": {}
65 | },
66 | "com.unity.modules.cloth": {
67 | "version": "1.0.0",
68 | "depth": 0,
69 | "source": "builtin",
70 | "dependencies": {
71 | "com.unity.modules.physics": "1.0.0"
72 | }
73 | },
74 | "com.unity.modules.director": {
75 | "version": "1.0.0",
76 | "depth": 0,
77 | "source": "builtin",
78 | "dependencies": {
79 | "com.unity.modules.audio": "1.0.0",
80 | "com.unity.modules.animation": "1.0.0"
81 | }
82 | },
83 | "com.unity.modules.imageconversion": {
84 | "version": "1.0.0",
85 | "depth": 0,
86 | "source": "builtin",
87 | "dependencies": {}
88 | },
89 | "com.unity.modules.imgui": {
90 | "version": "1.0.0",
91 | "depth": 0,
92 | "source": "builtin",
93 | "dependencies": {}
94 | },
95 | "com.unity.modules.jsonserialize": {
96 | "version": "1.0.0",
97 | "depth": 0,
98 | "source": "builtin",
99 | "dependencies": {}
100 | },
101 | "com.unity.modules.particlesystem": {
102 | "version": "1.0.0",
103 | "depth": 0,
104 | "source": "builtin",
105 | "dependencies": {}
106 | },
107 | "com.unity.modules.physics": {
108 | "version": "1.0.0",
109 | "depth": 0,
110 | "source": "builtin",
111 | "dependencies": {}
112 | },
113 | "com.unity.modules.physics2d": {
114 | "version": "1.0.0",
115 | "depth": 0,
116 | "source": "builtin",
117 | "dependencies": {}
118 | },
119 | "com.unity.modules.screencapture": {
120 | "version": "1.0.0",
121 | "depth": 0,
122 | "source": "builtin",
123 | "dependencies": {
124 | "com.unity.modules.imageconversion": "1.0.0"
125 | }
126 | },
127 | "com.unity.modules.subsystems": {
128 | "version": "1.0.0",
129 | "depth": 1,
130 | "source": "builtin",
131 | "dependencies": {
132 | "com.unity.modules.jsonserialize": "1.0.0"
133 | }
134 | },
135 | "com.unity.modules.terrain": {
136 | "version": "1.0.0",
137 | "depth": 0,
138 | "source": "builtin",
139 | "dependencies": {}
140 | },
141 | "com.unity.modules.terrainphysics": {
142 | "version": "1.0.0",
143 | "depth": 0,
144 | "source": "builtin",
145 | "dependencies": {
146 | "com.unity.modules.physics": "1.0.0",
147 | "com.unity.modules.terrain": "1.0.0"
148 | }
149 | },
150 | "com.unity.modules.tilemap": {
151 | "version": "1.0.0",
152 | "depth": 0,
153 | "source": "builtin",
154 | "dependencies": {
155 | "com.unity.modules.physics2d": "1.0.0"
156 | }
157 | },
158 | "com.unity.modules.ui": {
159 | "version": "1.0.0",
160 | "depth": 0,
161 | "source": "builtin",
162 | "dependencies": {}
163 | },
164 | "com.unity.modules.uielements": {
165 | "version": "1.0.0",
166 | "depth": 0,
167 | "source": "builtin",
168 | "dependencies": {
169 | "com.unity.modules.ui": "1.0.0",
170 | "com.unity.modules.imgui": "1.0.0",
171 | "com.unity.modules.jsonserialize": "1.0.0"
172 | }
173 | },
174 | "com.unity.modules.umbra": {
175 | "version": "1.0.0",
176 | "depth": 0,
177 | "source": "builtin",
178 | "dependencies": {}
179 | },
180 | "com.unity.modules.unityanalytics": {
181 | "version": "1.0.0",
182 | "depth": 0,
183 | "source": "builtin",
184 | "dependencies": {
185 | "com.unity.modules.unitywebrequest": "1.0.0",
186 | "com.unity.modules.jsonserialize": "1.0.0"
187 | }
188 | },
189 | "com.unity.modules.unitywebrequest": {
190 | "version": "1.0.0",
191 | "depth": 0,
192 | "source": "builtin",
193 | "dependencies": {}
194 | },
195 | "com.unity.modules.unitywebrequestassetbundle": {
196 | "version": "1.0.0",
197 | "depth": 0,
198 | "source": "builtin",
199 | "dependencies": {
200 | "com.unity.modules.assetbundle": "1.0.0",
201 | "com.unity.modules.unitywebrequest": "1.0.0"
202 | }
203 | },
204 | "com.unity.modules.unitywebrequestaudio": {
205 | "version": "1.0.0",
206 | "depth": 0,
207 | "source": "builtin",
208 | "dependencies": {
209 | "com.unity.modules.unitywebrequest": "1.0.0",
210 | "com.unity.modules.audio": "1.0.0"
211 | }
212 | },
213 | "com.unity.modules.unitywebrequesttexture": {
214 | "version": "1.0.0",
215 | "depth": 0,
216 | "source": "builtin",
217 | "dependencies": {
218 | "com.unity.modules.unitywebrequest": "1.0.0",
219 | "com.unity.modules.imageconversion": "1.0.0"
220 | }
221 | },
222 | "com.unity.modules.unitywebrequestwww": {
223 | "version": "1.0.0",
224 | "depth": 0,
225 | "source": "builtin",
226 | "dependencies": {
227 | "com.unity.modules.unitywebrequest": "1.0.0",
228 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
229 | "com.unity.modules.unitywebrequestaudio": "1.0.0",
230 | "com.unity.modules.audio": "1.0.0",
231 | "com.unity.modules.assetbundle": "1.0.0",
232 | "com.unity.modules.imageconversion": "1.0.0"
233 | }
234 | },
235 | "com.unity.modules.vehicles": {
236 | "version": "1.0.0",
237 | "depth": 0,
238 | "source": "builtin",
239 | "dependencies": {
240 | "com.unity.modules.physics": "1.0.0"
241 | }
242 | },
243 | "com.unity.modules.video": {
244 | "version": "1.0.0",
245 | "depth": 0,
246 | "source": "builtin",
247 | "dependencies": {
248 | "com.unity.modules.audio": "1.0.0",
249 | "com.unity.modules.ui": "1.0.0",
250 | "com.unity.modules.unitywebrequest": "1.0.0"
251 | }
252 | },
253 | "com.unity.modules.vr": {
254 | "version": "1.0.0",
255 | "depth": 0,
256 | "source": "builtin",
257 | "dependencies": {
258 | "com.unity.modules.jsonserialize": "1.0.0",
259 | "com.unity.modules.physics": "1.0.0",
260 | "com.unity.modules.xr": "1.0.0"
261 | }
262 | },
263 | "com.unity.modules.wind": {
264 | "version": "1.0.0",
265 | "depth": 0,
266 | "source": "builtin",
267 | "dependencies": {}
268 | },
269 | "com.unity.modules.xr": {
270 | "version": "1.0.0",
271 | "depth": 0,
272 | "source": "builtin",
273 | "dependencies": {
274 | "com.unity.modules.physics": "1.0.0",
275 | "com.unity.modules.jsonserialize": "1.0.0",
276 | "com.unity.modules.subsystems": "1.0.0"
277 | }
278 | }
279 | }
280 | }
281 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/Program.cs:
--------------------------------------------------------------------------------
1 | namespace z3lx.solo2yolo
2 | {
3 | internal static class Program
4 | {
5 | private const string MissingSoloPathErrorMessage = "Missing SOLO path for -i flag.";
6 | private const string MissingYoloPathErrorMessage = "Missing YOLO path for -o flag.";
7 | private const string MissingTaskTypeErrorMessage = "Missing task type for -t flag.";
8 | private const string InvalidTaskTypeErrorMessage = "Invalid task type for -t flag: {0}";
9 | private const string UnknownFlagErrorMessage = "Unknown flag: {0}";
10 | private const string UnknownArgumentErrorMessage = "Unknown argument: {0}";
11 |
12 | private static string soloPath = string.Empty;
13 | private static string yoloPath = string.Empty;
14 | private static ComputerVisionTask? task = null;
15 | private static bool unityEditor = false;
16 |
17 | private static HashSet errorMessages = new HashSet();
18 |
19 | static void Main(string[] args)
20 | {
21 | if (args.Length == 0)
22 | {
23 | ShowHelp();
24 | return;
25 | }
26 |
27 | ParseArguments(args);
28 |
29 | if (!ValidateArguments())
30 | return;
31 |
32 | DatasetConverter.Convert(soloPath, yoloPath, task.Value);
33 |
34 | if (unityEditor)
35 | {
36 | Console.WriteLine("\nPress any key to close this window...");
37 | Console.ReadKey();
38 | }
39 | }
40 |
41 | ///
42 | /// Parses the command-line arguments and assigns values to corresponding variables.
43 | ///
44 | /// The command-line arguments.
45 | private static void ParseArguments(string[] args)
46 | {
47 | for (int i = 0; i < args.Length; i++)
48 | {
49 | string argument = args[i];
50 |
51 | if (argument.StartsWith("--"))
52 | {
53 | string flag = argument.Substring(2);
54 |
55 | switch (flag)
56 | {
57 | case "unity-editor":
58 | unityEditor = true;
59 | break;
60 | }
61 | }
62 | else if (argument.StartsWith("-"))
63 | {
64 | string flag = argument.Substring(1);
65 |
66 | switch (flag)
67 | {
68 | case "i":
69 | if (TryGetNextArgumentValue(args, i, out string soloPathValue))
70 | {
71 | soloPath = soloPathValue;
72 | i++;
73 | }
74 | else
75 | {
76 | errorMessages.Add(MissingSoloPathErrorMessage);
77 | }
78 | break;
79 |
80 | case "o":
81 | if (TryGetNextArgumentValue(args, i, out string yoloPathValue))
82 | {
83 | yoloPath = yoloPathValue;
84 | i++;
85 | }
86 | else
87 | {
88 | errorMessages.Add(MissingYoloPathErrorMessage);
89 | }
90 | break;
91 |
92 | case "t":
93 | if (TryGetNextArgumentValue(args, i, out string taskValue))
94 | {
95 | if (TryParseComputerVisionTask(taskValue, out ComputerVisionTask parsedTask))
96 | {
97 | task = parsedTask;
98 | }
99 | else
100 | {
101 | errorMessages.Add(string.Format(InvalidTaskTypeErrorMessage, taskValue));
102 | }
103 | i++;
104 | }
105 | else
106 | {
107 | errorMessages.Add(MissingTaskTypeErrorMessage);
108 | }
109 | break;
110 |
111 | case "h":
112 | ShowHelp();
113 | Environment.Exit(0);
114 | break;
115 |
116 | default:
117 | errorMessages.Add(string.Format(UnknownFlagErrorMessage, flag));
118 | break;
119 | }
120 | }
121 | else
122 | {
123 | errorMessages.Add(string.Format(UnknownArgumentErrorMessage, argument));
124 | }
125 | }
126 | }
127 |
128 | ///
129 | /// Tries to retrieve the value of the next argument from the command-line arguments array.
130 | ///
131 | /// The command-line arguments.
132 | /// The current index in the arguments array.
133 | /// The retrieved argument value.
134 | /// true if the value was successfully retrieved; otherwise, false.
135 | private static bool TryGetNextArgumentValue(string[] args, int currentIndex, out string value)
136 | {
137 | value = string.Empty;
138 |
139 | if (currentIndex + 1 < args.Length && !args[currentIndex + 1].StartsWith("-"))
140 | {
141 | value = args[currentIndex + 1];
142 | return true;
143 | }
144 |
145 | return false;
146 | }
147 |
148 | ///
149 | /// Tries to parse the given task value to a enum value.
150 | ///
151 | /// The task value to parse.
152 | /// The parsed value.
153 | /// true if the parsing was successful; otherwise, false.
154 | private static bool TryParseComputerVisionTask(string taskValue, out ComputerVisionTask parsedTask)
155 | {
156 | return Enum.TryParse(char.ToUpper(taskValue[0]) + taskValue.Substring(1).ToLower(), out parsedTask);
157 | }
158 |
159 | ///
160 | /// Validates the parsed arguments.
161 | ///
162 | /// true if the arguments are valid; otherwise, false.
163 | private static bool ValidateArguments()
164 | {
165 | if (string.IsNullOrEmpty(soloPath))
166 | errorMessages.Add(MissingSoloPathErrorMessage);
167 |
168 | if (string.IsNullOrEmpty(yoloPath))
169 | errorMessages.Add(MissingYoloPathErrorMessage);
170 |
171 | if (task == null)
172 | errorMessages.Add(MissingTaskTypeErrorMessage);
173 |
174 | if (errorMessages.Count > 0)
175 | {
176 | foreach (string errorMessage in errorMessages)
177 | Console.WriteLine(errorMessage);
178 |
179 | return false;
180 | }
181 |
182 | return true;
183 | }
184 |
185 | ///
186 | /// Displays the help page with usage information.
187 | ///
188 | private static void ShowHelp()
189 | {
190 | Console.WriteLine("Usage:");
191 | Console.WriteLine("solo2yolo [-i ] [-o ] [-t ]");
192 |
193 | Console.WriteLine("\nExample:");
194 | Console.WriteLine("solo2yolo -i /path/to/solo_dataset -o /path/to/yolo_dataset -t detect");
195 |
196 | Console.WriteLine("\nMandatory Flags:");
197 | Console.WriteLine("-i: Specifies the input path for the SOLO dataset.");
198 | Console.WriteLine("-o: Specifies the output path for the converted YOLO dataset.");
199 | Console.WriteLine("-t: Specifies the computer vision task of the converted dataset.");
200 | Console.WriteLine(" Available options: classify, detect, segment, pose.");
201 |
202 | Console.WriteLine("\nOther Flags:");
203 | Console.WriteLine("-h: Displays this help page.");
204 | }
205 | }
206 | }
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Ll]og/
33 | [Ll]ogs/
34 |
35 | # Visual Studio 2015/2017 cache/options directory
36 | .vs/
37 | # Uncomment if you have tasks that create the project's static files in wwwroot
38 | #wwwroot/
39 |
40 | # Visual Studio 2017 auto generated files
41 | Generated\ Files/
42 |
43 | # MSTest test Results
44 | [Tt]est[Rr]esult*/
45 | [Bb]uild[Ll]og.*
46 |
47 | # NUnit
48 | *.VisualState.xml
49 | TestResult.xml
50 | nunit-*.xml
51 |
52 | # Build Results of an ATL Project
53 | [Dd]ebugPS/
54 | [Rr]eleasePS/
55 | dlldata.c
56 |
57 | # Benchmark Results
58 | BenchmarkDotNet.Artifacts/
59 |
60 | # .NET
61 | project.lock.json
62 | project.fragment.lock.json
63 | artifacts/
64 |
65 | # Tye
66 | .tye/
67 |
68 | # ASP.NET Scaffolding
69 | ScaffoldingReadMe.txt
70 |
71 | # StyleCop
72 | StyleCopReport.xml
73 |
74 | # Files built by Visual Studio
75 | *_i.c
76 | *_p.c
77 | *_h.h
78 | *.ilk
79 | *.meta
80 | *.obj
81 | *.iobj
82 | *.pch
83 | *.pdb
84 | *.ipdb
85 | *.pgc
86 | *.pgd
87 | *.rsp
88 | *.sbr
89 | *.tlb
90 | *.tli
91 | *.tlh
92 | *.tmp
93 | *.tmp_proj
94 | *_wpftmp.csproj
95 | *.log
96 | *.tlog
97 | *.vspscc
98 | *.vssscc
99 | .builds
100 | *.pidb
101 | *.svclog
102 | *.scc
103 |
104 | # Chutzpah Test files
105 | _Chutzpah*
106 |
107 | # Visual C++ cache files
108 | ipch/
109 | *.aps
110 | *.ncb
111 | *.opendb
112 | *.opensdf
113 | *.sdf
114 | *.cachefile
115 | *.VC.db
116 | *.VC.VC.opendb
117 |
118 | # Visual Studio profiler
119 | *.psess
120 | *.vsp
121 | *.vspx
122 | *.sap
123 |
124 | # Visual Studio Trace Files
125 | *.e2e
126 |
127 | # TFS 2012 Local Workspace
128 | $tf/
129 |
130 | # Guidance Automation Toolkit
131 | *.gpState
132 |
133 | # ReSharper is a .NET coding add-in
134 | _ReSharper*/
135 | *.[Rr]e[Ss]harper
136 | *.DotSettings.user
137 |
138 | # TeamCity is a build add-in
139 | _TeamCity*
140 |
141 | # DotCover is a Code Coverage Tool
142 | *.dotCover
143 |
144 | # AxoCover is a Code Coverage Tool
145 | .axoCover/*
146 | !.axoCover/settings.json
147 |
148 | # Coverlet is a free, cross platform Code Coverage Tool
149 | coverage*.json
150 | coverage*.xml
151 | coverage*.info
152 |
153 | # Visual Studio code coverage results
154 | *.coverage
155 | *.coveragexml
156 |
157 | # NCrunch
158 | _NCrunch_*
159 | .*crunch*.local.xml
160 | nCrunchTemp_*
161 |
162 | # MightyMoose
163 | *.mm.*
164 | AutoTest.Net/
165 |
166 | # Web workbench (sass)
167 | .sass-cache/
168 |
169 | # Installshield output folder
170 | [Ee]xpress/
171 |
172 | # DocProject is a documentation generator add-in
173 | DocProject/buildhelp/
174 | DocProject/Help/*.HxT
175 | DocProject/Help/*.HxC
176 | DocProject/Help/*.hhc
177 | DocProject/Help/*.hhk
178 | DocProject/Help/*.hhp
179 | DocProject/Help/Html2
180 | DocProject/Help/html
181 |
182 | # Click-Once directory
183 | publish/
184 |
185 | # Publish Web Output
186 | *.[Pp]ublish.xml
187 | *.azurePubxml
188 | # Note: Comment the next line if you want to checkin your web deploy settings,
189 | # but database connection strings (with potential passwords) will be unencrypted
190 | *.pubxml
191 | *.publishproj
192 |
193 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
194 | # checkin your Azure Web App publish settings, but sensitive information contained
195 | # in these scripts will be unencrypted
196 | PublishScripts/
197 |
198 | # NuGet Packages
199 | *.nupkg
200 | # NuGet Symbol Packages
201 | *.snupkg
202 | # The packages folder can be ignored because of Package Restore
203 | **/[Pp]ackages/*
204 | # except build/, which is used as an MSBuild target.
205 | !**/[Pp]ackages/build/
206 | # Uncomment if necessary however generally it will be regenerated when needed
207 | #!**/[Pp]ackages/repositories.config
208 | # NuGet v3's project.json files produces more ignorable files
209 | *.nuget.props
210 | *.nuget.targets
211 |
212 | # Microsoft Azure Build Output
213 | csx/
214 | *.build.csdef
215 |
216 | # Microsoft Azure Emulator
217 | ecf/
218 | rcf/
219 |
220 | # Windows Store app package directories and files
221 | AppPackages/
222 | BundleArtifacts/
223 | Package.StoreAssociation.xml
224 | _pkginfo.txt
225 | *.appx
226 | *.appxbundle
227 | *.appxupload
228 |
229 | # Visual Studio cache files
230 | # files ending in .cache can be ignored
231 | *.[Cc]ache
232 | # but keep track of directories ending in .cache
233 | !?*.[Cc]ache/
234 |
235 | # Others
236 | ClientBin/
237 | ~$*
238 | *~
239 | *.dbmdl
240 | *.dbproj.schemaview
241 | *.jfm
242 | *.pfx
243 | *.publishsettings
244 | orleans.codegen.cs
245 |
246 | # Including strong name files can present a security risk
247 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
248 | #*.snk
249 |
250 | # Since there are multiple workflows, uncomment next line to ignore bower_components
251 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
252 | #bower_components/
253 |
254 | # RIA/Silverlight projects
255 | Generated_Code/
256 |
257 | # Backup & report files from converting an old project file
258 | # to a newer Visual Studio version. Backup files are not needed,
259 | # because we have git ;-)
260 | _UpgradeReport_Files/
261 | Backup*/
262 | UpgradeLog*.XML
263 | UpgradeLog*.htm
264 | ServiceFabricBackup/
265 | *.rptproj.bak
266 |
267 | # SQL Server files
268 | *.mdf
269 | *.ldf
270 | *.ndf
271 |
272 | # Business Intelligence projects
273 | *.rdl.data
274 | *.bim.layout
275 | *.bim_*.settings
276 | *.rptproj.rsuser
277 | *- [Bb]ackup.rdl
278 | *- [Bb]ackup ([0-9]).rdl
279 | *- [Bb]ackup ([0-9][0-9]).rdl
280 |
281 | # Microsoft Fakes
282 | FakesAssemblies/
283 |
284 | # GhostDoc plugin setting file
285 | *.GhostDoc.xml
286 |
287 | # Node.js Tools for Visual Studio
288 | .ntvs_analysis.dat
289 | node_modules/
290 |
291 | # Visual Studio 6 build log
292 | *.plg
293 |
294 | # Visual Studio 6 workspace options file
295 | *.opt
296 |
297 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
298 | *.vbw
299 |
300 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
301 | *.vbp
302 |
303 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
304 | *.dsw
305 | *.dsp
306 |
307 | # Visual Studio 6 technical files
308 | *.ncb
309 | *.aps
310 |
311 | # Visual Studio LightSwitch build output
312 | **/*.HTMLClient/GeneratedArtifacts
313 | **/*.DesktopClient/GeneratedArtifacts
314 | **/*.DesktopClient/ModelManifest.xml
315 | **/*.Server/GeneratedArtifacts
316 | **/*.Server/ModelManifest.xml
317 | _Pvt_Extensions
318 |
319 | # Paket dependency manager
320 | .paket/paket.exe
321 | paket-files/
322 |
323 | # FAKE - F# Make
324 | .fake/
325 |
326 | # CodeRush personal settings
327 | .cr/personal
328 |
329 | # Python Tools for Visual Studio (PTVS)
330 | __pycache__/
331 | *.pyc
332 |
333 | # Cake - Uncomment if you are using it
334 | # tools/**
335 | # !tools/packages.config
336 |
337 | # Tabs Studio
338 | *.tss
339 |
340 | # Telerik's JustMock configuration file
341 | *.jmconfig
342 |
343 | # BizTalk build output
344 | *.btp.cs
345 | *.btm.cs
346 | *.odx.cs
347 | *.xsd.cs
348 |
349 | # OpenCover UI analysis results
350 | OpenCover/
351 |
352 | # Azure Stream Analytics local run output
353 | ASALocalRun/
354 |
355 | # MSBuild Binary and Structured Log
356 | *.binlog
357 |
358 | # NVidia Nsight GPU debugger configuration file
359 | *.nvuser
360 |
361 | # MFractors (Xamarin productivity tool) working folder
362 | .mfractor/
363 |
364 | # Local History for Visual Studio
365 | .localhistory/
366 |
367 | # Visual Studio History (VSHistory) files
368 | .vshistory/
369 |
370 | # BeatPulse healthcheck temp database
371 | healthchecksdb
372 |
373 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
374 | MigrationBackup/
375 |
376 | # Ionide (cross platform F# VS Code tools) working folder
377 | .ionide/
378 |
379 | # Fody - auto-generated XML schema
380 | FodyWeavers.xsd
381 |
382 | # VS Code files for those working on multiple tools
383 | .vscode/*
384 | !.vscode/settings.json
385 | !.vscode/tasks.json
386 | !.vscode/launch.json
387 | !.vscode/extensions.json
388 | *.code-workspace
389 |
390 | # Local History for Visual Studio Code
391 | .history/
392 |
393 | # Windows Installer files from build outputs
394 | *.cab
395 | *.msi
396 | *.msix
397 | *.msm
398 | *.msp
399 |
400 | # JetBrains Rider
401 | *.sln.iml
402 |
403 | ##
404 | ## Visual studio for Mac
405 | ##
406 |
407 |
408 | # globs
409 | Makefile.in
410 | *.userprefs
411 | *.usertasks
412 | config.make
413 | config.status
414 | aclocal.m4
415 | install-sh
416 | autom4te.cache/
417 | *.tar.gz
418 | tarballs/
419 | test-results/
420 |
421 | # Mac bundle stuff
422 | *.dmg
423 | *.app
424 |
425 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
426 | # General
427 | .DS_Store
428 | .AppleDouble
429 | .LSOverride
430 |
431 | # Icon must end with two \r
432 | Icon
433 |
434 |
435 | # Thumbnails
436 | ._*
437 |
438 | # Files that might appear in the root of a volume
439 | .DocumentRevisions-V100
440 | .fseventsd
441 | .Spotlight-V100
442 | .TemporaryItems
443 | .Trashes
444 | .VolumeIcon.icns
445 | .com.apple.timemachine.donotpresent
446 |
447 | # Directories potentially created on remote AFP share
448 | .AppleDB
449 | .AppleDesktop
450 | Network Trash Folder
451 | Temporary Items
452 | .apdisk
453 |
454 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
455 | # Windows thumbnail cache files
456 | Thumbs.db
457 | ehthumbs.db
458 | ehthumbs_vista.db
459 |
460 | # Dump file
461 | *.stackdump
462 |
463 | # Folder config file
464 | [Dd]esktop.ini
465 |
466 | # Recycle Bin used on file shares
467 | $RECYCLE.BIN/
468 |
469 | # Windows Installer files
470 | *.cab
471 | *.msi
472 | *.msix
473 | *.msm
474 | *.msp
475 |
476 | # Windows shortcuts
477 | *.lnk
478 |
--------------------------------------------------------------------------------
/src/solo2yolo-dotnet/DatasetConverter.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System.Diagnostics;
3 | using System.Text.RegularExpressions;
4 | using z3lx.solo2yolo.Json.DataModels;
5 |
6 | namespace z3lx.solo2yolo
7 | {
8 | ///
9 | /// Provides functionality to convert a SOLO dataset to the YOLO format.
10 | ///
11 | public static class DatasetConverter
12 | {
13 | // TODO: Add image dimension verification
14 | ///
15 | /// Converts a SOLO dataset to the YOLO format.
16 | ///
17 | /// The path to the SOLO dataset.
18 | /// The path to store the converted YOLO dataset.
19 | /// The computer vision task conversion to perform.
20 | public static void Convert(string soloPath, string outputPath, ComputerVisionTask task)
21 | {
22 | // Validate and sanitize paths
23 | try
24 | {
25 | ValidateAndSanitizePath(ref soloPath);
26 | ValidateAndSanitizePath(ref outputPath);
27 | }
28 | catch (Exception ex)
29 | {
30 | ConsoleUtility.PrintError($"{ex.Message} Aborting.");
31 | return;
32 | }
33 |
34 | // Read metadata
35 | string metadataPath = Path.Combine(soloPath, "metadata.json");
36 | if (!TryDeserializeObjectFromFile(metadataPath, out Metadata metadata))
37 | return;
38 |
39 | // Read annotation definitions
40 | string annotationDefinitionsPath = Path.Combine(soloPath, "annotation_definitions.json");
41 | if (!TryDeserializeObjectFromFile(annotationDefinitionsPath, out AnnotationDefinitions annotationDefinitions))
42 | return;
43 |
44 | // Find frames
45 | if (!TryFindFrames(soloPath, metadata, out IEnumerable frameDataPaths, out int frameCount))
46 | return;
47 |
48 | // TODO: Check for write permission
49 | // Create output directory
50 | ConsoleUtility.PrintInfo("Creating YOLO directory...");
51 | string yoloPath = CreateYoloDirectory(outputPath);
52 |
53 | // Convert dataset format
54 | ConsoleUtility.PrintInfo("Starting dataset format conversion...");
55 | Stopwatch stopwatch = Stopwatch.StartNew();
56 |
57 | int soloIndex = 0;
58 | int yoloIndex = 0;
59 | foreach (string frameDataPath in frameDataPaths)
60 | {
61 | soloIndex++;
62 |
63 | // Deserialize frame data json
64 | if (!TryDeserializeObjectFromFile(frameDataPath, out FrameData frameData))
65 | {
66 | ConsoleUtility.PrintError($"Skipped frame {soloIndex} out of {frameCount}: " +
67 | "could not deserialize frame data.");
68 | continue;
69 | }
70 |
71 | // Check for captures
72 | if (frameData.Captures == null || frameData.Captures.Length == 0)
73 | {
74 | ConsoleUtility.PrintWarning($"Skipped frame {soloIndex} out of {frameCount}: " +
75 | "no reported captures.");
76 | continue;
77 | }
78 |
79 | // Hardcoded RGB capture
80 | RgbCapture capture = frameData.Captures.OfType().FirstOrDefault();
81 | if (string.IsNullOrEmpty(capture.FileName) || !File.Exists(Path.Combine(Directory.GetParent(frameDataPath).FullName, capture.FileName)))
82 | {
83 | ConsoleUtility.PrintWarning($"Skipped frame {soloIndex} out of {frameCount}: " +
84 | "no associated image file.");
85 | continue;
86 | }
87 |
88 | // Convert annotations for the frame depending on the task
89 | string labelingData = ConvertLabelingData(capture, task);
90 | if (string.IsNullOrEmpty(labelingData))
91 | {
92 | ConsoleUtility.PrintWarning($"Skipped labelling for frame {soloIndex} out of {frameCount}: " +
93 | "no reported labels.");
94 | }
95 | else
96 | {
97 | // Write labeling data to output
98 | string labelingDataPath = Path.Combine(yoloPath, "labels", $"{yoloIndex:D12}.txt");
99 | File.WriteAllText(labelingDataPath, labelingData);
100 | }
101 |
102 | // Copy image to output
103 | string sourceImagePath = Path.Combine(Directory.GetParent(frameDataPath).FullName, capture.FileName);
104 | string destImagePath = Path.Combine(yoloPath, "images", $"{yoloIndex:D12}.{capture.ImageFormat.ToLower()}");
105 | File.Copy(sourceImagePath, destImagePath);
106 |
107 | ConsoleUtility.PrintInfo($"Processed frame {soloIndex} out of {frameCount}.");
108 |
109 | yoloIndex++;
110 | }
111 |
112 | // Create dataset.yaml
113 | ConsoleUtility.PrintInfo("Creating dataset.yaml...");
114 | AnnotationDefinition annotationDefinition = annotationDefinitions.Values[0];
115 | GenerateDatasetYaml(yoloPath, annotationDefinition);
116 |
117 | stopwatch.Stop();
118 | TimeSpan ts = stopwatch.Elapsed;
119 | ConsoleUtility.PrintInfo($"Finished dataset format conversion in {ts.TotalMilliseconds:F3} ms.");
120 | }
121 |
122 | ///
123 | /// Tries to deserialize a JSON file into an object.
124 | ///
125 | /// The type of the object to deserialize.
126 | /// The path to the JSON file.
127 | /// The deserialized object.
128 | private static bool TryDeserializeObjectFromFile(string filePath, out T result)
129 | {
130 | try
131 | {
132 | result = DeserializeObjectFromFile(filePath);
133 | return true;
134 | }
135 | catch (Exception ex)
136 | {
137 | ConsoleUtility.PrintError($"{ex.Message} Aborting.");
138 | result = default;
139 | return false;
140 | }
141 | }
142 |
143 | ///
144 | /// Deserializes a JSON file into an object.
145 | ///
146 | /// The type of the object to deserialize.
147 | /// The path to the JSON file.
148 | /// The deserialized object.
149 | private static T DeserializeObjectFromFile(string filePath)
150 | {
151 | if (!File.Exists(filePath))
152 | throw new FileNotFoundException($"File '{filePath}' not found.");
153 |
154 | try
155 | {
156 | string data = File.ReadAllText(filePath);
157 | if (string.IsNullOrEmpty(data))
158 | throw new JsonSerializationException($"File '{filePath}' is empty.");
159 |
160 | T deserializedObject = JsonConvert.DeserializeObject(data);
161 | if (deserializedObject == null)
162 | throw new JsonSerializationException($"Failed to deserialize {typeof(T)} from the file '{filePath}'.");
163 |
164 | return deserializedObject;
165 | }
166 | catch (Exception ex)
167 | {
168 | throw new JsonSerializationException($"An error occurred while deserializing the file '{filePath}': {ex.Message}", ex);
169 | }
170 | }
171 |
172 | ///
173 | /// Validates and sanitizes a file or directory path.
174 | ///
175 | /// The path to validate and sanitize.
176 | private static void ValidateAndSanitizePath(ref string path)
177 | {
178 | if (string.IsNullOrWhiteSpace(path))
179 | throw new DirectoryNotFoundException("Path cannot be null or empty.");
180 |
181 | path = path.Trim();
182 |
183 | if (Path.GetInvalidPathChars().Any(path.Contains))
184 | throw new DirectoryNotFoundException($"Path '{path}' contains invalid characters.");
185 |
186 | if (!Path.IsPathRooted(path))
187 | throw new DirectoryNotFoundException($"Path '{path}' is not an absolute path.");
188 |
189 | if (!Directory.Exists(path))
190 | throw new DirectoryNotFoundException($"Path '{path}' does not exist.");
191 | }
192 |
193 | ///
194 | /// Tries to find frame paths in the SOLO dataset.
195 | ///
196 | /// The path to the SOLO dataset.
197 | /// /// The metadata associated to the SOLO dataset.
198 | /// The frame paths.
199 | /// The frame count.
200 | ///
201 | private static bool TryFindFrames(string soloPath, Metadata metadata, out IEnumerable frameDataPaths, out int frameCount)
202 | {
203 | ConsoleUtility.PrintInfo("Finding frame(s)...");
204 | Stopwatch stopwatch = Stopwatch.StartNew();
205 |
206 | try
207 | {
208 | frameDataPaths = FindFrames(soloPath);
209 | frameCount = frameDataPaths.Count();
210 | }
211 | catch (Exception ex)
212 | {
213 | ConsoleUtility.PrintError($"{ex.Message} Aborting.");
214 | frameDataPaths = default;
215 | frameCount = -1;
216 | return false;
217 | }
218 |
219 | stopwatch.Stop();
220 | TimeSpan ts = stopwatch.Elapsed;
221 |
222 | if (frameCount == metadata.TotalFrames)
223 | {
224 | ConsoleUtility.PrintInfo(string.Format("Found {0} frame{1} in {2:F3} ms.",
225 | frameCount, frameCount == 1 ? "" : "s", ts.TotalMilliseconds));
226 | }
227 | else if (frameCount == 0)
228 | {
229 | ConsoleUtility.PrintError($"Did not find any frames in '{soloPath}'. Aborting.");
230 | return false;
231 | }
232 | else
233 | {
234 | ConsoleUtility.PrintWarning(string.Format("Found {0} frame{1} in {2:F3} ms, expected {3}.",
235 | frameCount, frameCount == 1 ? "" : "s", ts.TotalMilliseconds, metadata.TotalFrames));
236 | }
237 |
238 | return true;
239 | }
240 |
241 | ///
242 | /// Finds frame paths in the SOLO dataset.
243 | ///
244 | /// The path to the SOLO dataset.
245 | /// The frame paths.
246 | private static IEnumerable FindFrames(string soloPath)
247 | {
248 | try
249 | {
250 | string sequencePattern = "sequence.*";
251 | IEnumerable sequencePaths = Directory.EnumerateDirectories(soloPath, sequencePattern, SearchOption.TopDirectoryOnly)
252 | .OrderBy(sequencePath => GetIndexFromPath(sequencePath, sequencePattern));
253 |
254 | string framePattern = "step*.frame_data.json";
255 | IEnumerable frameDataPaths = sequencePaths
256 | .SelectMany(sequencePath => Directory.EnumerateFiles(sequencePath, framePattern, SearchOption.TopDirectoryOnly)
257 | .OrderBy(frameDataPath => GetIndexFromPath(frameDataPath, framePattern)));
258 |
259 | return frameDataPaths;
260 | }
261 | catch (Exception ex)
262 | {
263 | throw new IOException($"An error occurred while finding frames in {soloPath}: {ex.Message}", ex);
264 | }
265 | }
266 |
267 | ///
268 | /// Extracts the index from a given path using the provided format.
269 | ///
270 | /// The path to get the index from.
271 | /// The path format.
272 | /// The extracted index.
273 | private static int GetIndexFromPath(string path, string format)
274 | {
275 | string fileName = Path.GetFileName(path);
276 | string pattern = format.Replace("*", "(\\d+)");
277 | Match match = Regex.Match(fileName, pattern);
278 |
279 | if (!match.Success || !(match.Groups.Count > 1))
280 | return -1;
281 |
282 | string indexString = match.Groups[1].Value;
283 | return int.Parse(indexString);
284 | }
285 |
286 | ///
287 | /// Creates a YOLO directory for storing the converted dataset.
288 | ///
289 | /// The base path to create the YOLO directory.
290 | /// The path to the created YOLO directory.
291 | private static string CreateYoloDirectory(string path)
292 | {
293 | int i = 0;
294 | string yoloPath = Path.Combine(path, "yolo");
295 |
296 | while (Directory.Exists(yoloPath))
297 | {
298 | i++;
299 | yoloPath = Path.Combine(path, $"yolo_{i}");
300 | }
301 |
302 | Directory.CreateDirectory(yoloPath);
303 | Directory.CreateDirectory(Path.Combine(yoloPath, "images"));
304 | Directory.CreateDirectory(Path.Combine(yoloPath, "labels"));
305 | return yoloPath;
306 | }
307 |
308 | // Can there be multiple of the same annotation type?
309 | // TODO: Add support for other computer vision tasks
310 | ///
311 | /// Converts the labeling data based on the computer vision task.
312 | ///
313 | /// The capture to convert.
314 | /// The computer vision task.
315 | /// The converted labeling data.
316 | private static string ConvertLabelingData(RgbCapture capture, ComputerVisionTask task)
317 | {
318 | string labelingData = string.Empty;
319 |
320 | switch (task)
321 | {
322 | case ComputerVisionTask.Classify:
323 | throw new NotImplementedException();
324 |
325 | case ComputerVisionTask.Detect:
326 | BoundingBox2DAnnotation annotation = capture.Annotations.OfType().FirstOrDefault();
327 | if (annotation == null)
328 | return null;
329 |
330 | if (annotation.Values == null)
331 | return null;
332 |
333 | foreach (BoundingBox2DAnnotation.Value value in annotation.Values)
334 | {
335 | int objectClassId = value.LabelId;
336 | double x = (double)(value.Origin.X + (value.Dimension.X / 2)) / capture.Dimension.X;
337 | double y = (double)(value.Origin.Y + (value.Dimension.Y / 2)) / capture.Dimension.Y;
338 | double width = (double)value.Dimension.X / capture.Dimension.X;
339 | double height = (double)value.Dimension.Y / capture.Dimension.Y;
340 | labelingData += $"{objectClassId} {x} {y} {width} {height}\n";
341 | }
342 | break;
343 |
344 | case ComputerVisionTask.Segment:
345 | throw new NotImplementedException();
346 |
347 | case ComputerVisionTask.Pose:
348 | throw new NotImplementedException();
349 |
350 | default:
351 | throw new ArgumentOutOfRangeException(nameof(task), task, "Unsupported task type. ");
352 | }
353 |
354 | return labelingData;
355 | }
356 |
357 | ///
358 | /// Generates the dataset YAML file for YOLO.
359 | ///
360 | /// The path to the YOLO directory.
361 | /// The annotation definition.
362 | private static void GenerateDatasetYaml(string yoloPath, AnnotationDefinition annotationDefinition)
363 | {
364 | string content =
365 | $"path: {yoloPath} # dataset root dir\n" +
366 | "train: images # train images (relative to 'path')\n" +
367 | "val: images # val images (relative to 'path')\n" +
368 | "test: # test images (optional)\n" +
369 | "\n" +
370 | "# Classes\n" +
371 | "names:\n";
372 |
373 | foreach (AnnotationDefinition.Specification spec in annotationDefinition.Specifications)
374 | content += $" {spec.LabelId}: {spec.labelName}\n";
375 |
376 | string yamlFilePath = Path.Combine(yoloPath, "dataset.yaml");
377 | File.WriteAllText(yamlFilePath, content);
378 | }
379 | }
380 | }
--------------------------------------------------------------------------------
/src/solo2yolo-unity/ProjectSettings/ProjectSettings.asset:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!129 &1
4 | PlayerSettings:
5 | m_ObjectHideFlags: 0
6 | serializedVersion: 26
7 | productGUID: d51cf5726b1e85c4daf75879e73b156d
8 | AndroidProfiler: 0
9 | AndroidFilterTouchesWhenObscured: 0
10 | AndroidEnableSustainedPerformanceMode: 0
11 | defaultScreenOrientation: 4
12 | targetDevice: 2
13 | useOnDemandResources: 0
14 | accelerometerFrequency: 60
15 | companyName: z3lx
16 | productName: solo2yolo
17 | defaultCursor: {fileID: 0}
18 | cursorHotspot: {x: 0, y: 0}
19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
20 | m_ShowUnitySplashScreen: 1
21 | m_ShowUnitySplashLogo: 1
22 | m_SplashScreenOverlayOpacity: 1
23 | m_SplashScreenAnimation: 1
24 | m_SplashScreenLogoStyle: 1
25 | m_SplashScreenDrawMode: 0
26 | m_SplashScreenBackgroundAnimationZoom: 1
27 | m_SplashScreenLogoAnimationZoom: 1
28 | m_SplashScreenBackgroundLandscapeAspect: 1
29 | m_SplashScreenBackgroundPortraitAspect: 1
30 | m_SplashScreenBackgroundLandscapeUvs:
31 | serializedVersion: 2
32 | x: 0
33 | y: 0
34 | width: 1
35 | height: 1
36 | m_SplashScreenBackgroundPortraitUvs:
37 | serializedVersion: 2
38 | x: 0
39 | y: 0
40 | width: 1
41 | height: 1
42 | m_SplashScreenLogos: []
43 | m_VirtualRealitySplashScreen: {fileID: 0}
44 | m_HolographicTrackingLossScreen: {fileID: 0}
45 | defaultScreenWidth: 1920
46 | defaultScreenHeight: 1080
47 | defaultScreenWidthWeb: 960
48 | defaultScreenHeightWeb: 600
49 | m_StereoRenderingPath: 0
50 | m_ActiveColorSpace: 0
51 | m_SpriteBatchVertexThreshold: 300
52 | m_MTRendering: 1
53 | mipStripping: 0
54 | numberOfMipsStripped: 0
55 | numberOfMipsStrippedPerMipmapLimitGroup: {}
56 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000
57 | iosShowActivityIndicatorOnLoading: -1
58 | androidShowActivityIndicatorOnLoading: -1
59 | iosUseCustomAppBackgroundBehavior: 0
60 | allowedAutorotateToPortrait: 1
61 | allowedAutorotateToPortraitUpsideDown: 1
62 | allowedAutorotateToLandscapeRight: 1
63 | allowedAutorotateToLandscapeLeft: 1
64 | useOSAutorotation: 1
65 | use32BitDisplayBuffer: 1
66 | preserveFramebufferAlpha: 0
67 | disableDepthAndStencilBuffers: 0
68 | androidStartInFullscreen: 1
69 | androidRenderOutsideSafeArea: 1
70 | androidUseSwappy: 1
71 | androidBlitType: 0
72 | androidResizableWindow: 0
73 | androidDefaultWindowWidth: 1920
74 | androidDefaultWindowHeight: 1080
75 | androidMinimumWindowWidth: 400
76 | androidMinimumWindowHeight: 300
77 | androidFullscreenMode: 1
78 | defaultIsNativeResolution: 1
79 | macRetinaSupport: 1
80 | runInBackground: 1
81 | captureSingleScreen: 0
82 | muteOtherAudioSources: 0
83 | Prepare IOS For Recording: 0
84 | Force IOS Speakers When Recording: 0
85 | deferSystemGesturesMode: 0
86 | hideHomeButton: 0
87 | submitAnalytics: 1
88 | usePlayerLog: 1
89 | bakeCollisionMeshes: 0
90 | forceSingleInstance: 0
91 | useFlipModelSwapchain: 1
92 | resizableWindow: 0
93 | useMacAppStoreValidation: 0
94 | macAppStoreCategory: public.app-category.games
95 | gpuSkinning: 1
96 | xboxPIXTextureCapture: 0
97 | xboxEnableAvatar: 0
98 | xboxEnableKinect: 0
99 | xboxEnableKinectAutoTracking: 0
100 | xboxEnableFitness: 0
101 | visibleInBackground: 1
102 | allowFullscreenSwitch: 1
103 | fullscreenMode: 1
104 | xboxSpeechDB: 0
105 | xboxEnableHeadOrientation: 0
106 | xboxEnableGuest: 0
107 | xboxEnablePIXSampling: 0
108 | metalFramebufferOnly: 0
109 | xboxOneResolution: 0
110 | xboxOneSResolution: 0
111 | xboxOneXResolution: 3
112 | xboxOneMonoLoggingLevel: 0
113 | xboxOneLoggingLevel: 1
114 | xboxOneDisableEsram: 0
115 | xboxOneEnableTypeOptimization: 0
116 | xboxOnePresentImmediateThreshold: 0
117 | switchQueueCommandMemory: 0
118 | switchQueueControlMemory: 16384
119 | switchQueueComputeMemory: 262144
120 | switchNVNShaderPoolsGranularity: 33554432
121 | switchNVNDefaultPoolsGranularity: 16777216
122 | switchNVNOtherPoolsGranularity: 16777216
123 | switchGpuScratchPoolGranularity: 2097152
124 | switchAllowGpuScratchShrinking: 0
125 | switchNVNMaxPublicTextureIDCount: 0
126 | switchNVNMaxPublicSamplerIDCount: 0
127 | switchNVNGraphicsFirmwareMemory: 32
128 | stadiaPresentMode: 0
129 | stadiaTargetFramerate: 0
130 | vulkanNumSwapchainBuffers: 3
131 | vulkanEnableSetSRGBWrite: 0
132 | vulkanEnablePreTransform: 1
133 | vulkanEnableLateAcquireNextImage: 0
134 | vulkanEnableCommandBufferRecycling: 1
135 | loadStoreDebugModeEnabled: 0
136 | bundleVersion: 0.1
137 | preloadedAssets: []
138 | metroInputSource: 0
139 | wsaTransparentSwapchain: 0
140 | m_HolographicPauseOnTrackingLoss: 1
141 | xboxOneDisableKinectGpuReservation: 1
142 | xboxOneEnable7thCore: 1
143 | vrSettings:
144 | enable360StereoCapture: 0
145 | isWsaHolographicRemotingEnabled: 0
146 | enableFrameTimingStats: 0
147 | enableOpenGLProfilerGPURecorders: 1
148 | useHDRDisplay: 0
149 | hdrBitDepth: 0
150 | m_ColorGamuts: 00000000
151 | targetPixelDensity: 30
152 | resolutionScalingMode: 0
153 | resetResolutionOnWindowResize: 0
154 | androidSupportedAspectRatio: 1
155 | androidMaxAspectRatio: 2.1
156 | applicationIdentifier:
157 | Standalone: com.z3lx.solo2yolo
158 | buildNumber:
159 | Standalone: 0
160 | iPhone: 0
161 | tvOS: 0
162 | overrideDefaultApplicationIdentifier: 0
163 | AndroidBundleVersionCode: 1
164 | AndroidMinSdkVersion: 22
165 | AndroidTargetSdkVersion: 0
166 | AndroidPreferredInstallLocation: 1
167 | aotOptions:
168 | stripEngineCode: 1
169 | iPhoneStrippingLevel: 0
170 | iPhoneScriptCallOptimization: 0
171 | ForceInternetPermission: 0
172 | ForceSDCardPermission: 0
173 | CreateWallpaper: 0
174 | APKExpansionFiles: 0
175 | keepLoadedShadersAlive: 0
176 | StripUnusedMeshComponents: 1
177 | strictShaderVariantMatching: 0
178 | VertexChannelCompressionMask: 4054
179 | iPhoneSdkVersion: 988
180 | iOSTargetOSVersionString: 12.0
181 | tvOSSdkVersion: 0
182 | tvOSRequireExtendedGameController: 0
183 | tvOSTargetOSVersionString: 12.0
184 | uIPrerenderedIcon: 0
185 | uIRequiresPersistentWiFi: 0
186 | uIRequiresFullScreen: 1
187 | uIStatusBarHidden: 1
188 | uIExitOnSuspend: 0
189 | uIStatusBarStyle: 0
190 | appleTVSplashScreen: {fileID: 0}
191 | appleTVSplashScreen2x: {fileID: 0}
192 | tvOSSmallIconLayers: []
193 | tvOSSmallIconLayers2x: []
194 | tvOSLargeIconLayers: []
195 | tvOSLargeIconLayers2x: []
196 | tvOSTopShelfImageLayers: []
197 | tvOSTopShelfImageLayers2x: []
198 | tvOSTopShelfImageWideLayers: []
199 | tvOSTopShelfImageWideLayers2x: []
200 | iOSLaunchScreenType: 0
201 | iOSLaunchScreenPortrait: {fileID: 0}
202 | iOSLaunchScreenLandscape: {fileID: 0}
203 | iOSLaunchScreenBackgroundColor:
204 | serializedVersion: 2
205 | rgba: 0
206 | iOSLaunchScreenFillPct: 100
207 | iOSLaunchScreenSize: 100
208 | iOSLaunchScreenCustomXibPath:
209 | iOSLaunchScreeniPadType: 0
210 | iOSLaunchScreeniPadImage: {fileID: 0}
211 | iOSLaunchScreeniPadBackgroundColor:
212 | serializedVersion: 2
213 | rgba: 0
214 | iOSLaunchScreeniPadFillPct: 100
215 | iOSLaunchScreeniPadSize: 100
216 | iOSLaunchScreeniPadCustomXibPath:
217 | iOSLaunchScreenCustomStoryboardPath:
218 | iOSLaunchScreeniPadCustomStoryboardPath:
219 | iOSDeviceRequirements: []
220 | iOSURLSchemes: []
221 | macOSURLSchemes: []
222 | iOSBackgroundModes: 0
223 | iOSMetalForceHardShadows: 0
224 | metalEditorSupport: 1
225 | metalAPIValidation: 1
226 | iOSRenderExtraFrameOnPause: 0
227 | iosCopyPluginsCodeInsteadOfSymlink: 0
228 | appleDeveloperTeamID:
229 | iOSManualSigningProvisioningProfileID:
230 | tvOSManualSigningProvisioningProfileID:
231 | iOSManualSigningProvisioningProfileType: 0
232 | tvOSManualSigningProvisioningProfileType: 0
233 | appleEnableAutomaticSigning: 0
234 | iOSRequireARKit: 0
235 | iOSAutomaticallyDetectAndAddCapabilities: 1
236 | appleEnableProMotion: 0
237 | shaderPrecisionModel: 0
238 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea
239 | templatePackageId: com.unity.template.3d@8.1.1
240 | templateDefaultScene: Assets/Scenes/SampleScene.unity
241 | useCustomMainManifest: 0
242 | useCustomLauncherManifest: 0
243 | useCustomMainGradleTemplate: 0
244 | useCustomLauncherGradleManifest: 0
245 | useCustomBaseGradleTemplate: 0
246 | useCustomGradlePropertiesTemplate: 0
247 | useCustomGradleSettingsTemplate: 0
248 | useCustomProguardFile: 0
249 | AndroidTargetArchitectures: 1
250 | AndroidTargetDevices: 0
251 | AndroidSplashScreenScale: 0
252 | androidSplashScreen: {fileID: 0}
253 | AndroidKeystoreName:
254 | AndroidKeyaliasName:
255 | AndroidEnableArmv9SecurityFeatures: 0
256 | AndroidBuildApkPerCpuArchitecture: 0
257 | AndroidTVCompatibility: 0
258 | AndroidIsGame: 1
259 | AndroidEnableTango: 0
260 | androidEnableBanner: 1
261 | androidUseLowAccuracyLocation: 0
262 | androidUseCustomKeystore: 0
263 | m_AndroidBanners:
264 | - width: 320
265 | height: 180
266 | banner: {fileID: 0}
267 | androidGamepadSupportLevel: 0
268 | chromeosInputEmulation: 1
269 | AndroidMinifyRelease: 0
270 | AndroidMinifyDebug: 0
271 | AndroidValidateAppBundleSize: 1
272 | AndroidAppBundleSizeToValidate: 150
273 | m_BuildTargetIcons: []
274 | m_BuildTargetPlatformIcons: []
275 | m_BuildTargetBatching:
276 | - m_BuildTarget: Standalone
277 | m_StaticBatching: 1
278 | m_DynamicBatching: 0
279 | - m_BuildTarget: tvOS
280 | m_StaticBatching: 1
281 | m_DynamicBatching: 0
282 | - m_BuildTarget: Android
283 | m_StaticBatching: 1
284 | m_DynamicBatching: 0
285 | - m_BuildTarget: iPhone
286 | m_StaticBatching: 1
287 | m_DynamicBatching: 0
288 | - m_BuildTarget: WebGL
289 | m_StaticBatching: 0
290 | m_DynamicBatching: 0
291 | m_BuildTargetShaderSettings: []
292 | m_BuildTargetGraphicsJobs:
293 | - m_BuildTarget: MacStandaloneSupport
294 | m_GraphicsJobs: 0
295 | - m_BuildTarget: Switch
296 | m_GraphicsJobs: 1
297 | - m_BuildTarget: MetroSupport
298 | m_GraphicsJobs: 1
299 | - m_BuildTarget: AppleTVSupport
300 | m_GraphicsJobs: 0
301 | - m_BuildTarget: BJMSupport
302 | m_GraphicsJobs: 1
303 | - m_BuildTarget: LinuxStandaloneSupport
304 | m_GraphicsJobs: 1
305 | - m_BuildTarget: PS4Player
306 | m_GraphicsJobs: 1
307 | - m_BuildTarget: iOSSupport
308 | m_GraphicsJobs: 0
309 | - m_BuildTarget: WindowsStandaloneSupport
310 | m_GraphicsJobs: 1
311 | - m_BuildTarget: XboxOnePlayer
312 | m_GraphicsJobs: 1
313 | - m_BuildTarget: LuminSupport
314 | m_GraphicsJobs: 0
315 | - m_BuildTarget: AndroidPlayer
316 | m_GraphicsJobs: 0
317 | - m_BuildTarget: WebGLSupport
318 | m_GraphicsJobs: 0
319 | m_BuildTargetGraphicsJobMode:
320 | - m_BuildTarget: PS4Player
321 | m_GraphicsJobMode: 0
322 | - m_BuildTarget: XboxOnePlayer
323 | m_GraphicsJobMode: 0
324 | m_BuildTargetGraphicsAPIs:
325 | - m_BuildTarget: AndroidPlayer
326 | m_APIs: 150000000b000000
327 | m_Automatic: 1
328 | - m_BuildTarget: iOSSupport
329 | m_APIs: 10000000
330 | m_Automatic: 1
331 | - m_BuildTarget: AppleTVSupport
332 | m_APIs: 10000000
333 | m_Automatic: 1
334 | - m_BuildTarget: WebGLSupport
335 | m_APIs: 0b000000
336 | m_Automatic: 1
337 | m_BuildTargetVRSettings:
338 | - m_BuildTarget: Standalone
339 | m_Enabled: 0
340 | m_Devices:
341 | - Oculus
342 | - OpenVR
343 | m_DefaultShaderChunkSizeInMB: 16
344 | m_DefaultShaderChunkCount: 0
345 | openGLRequireES31: 0
346 | openGLRequireES31AEP: 0
347 | openGLRequireES32: 0
348 | m_TemplateCustomTags: {}
349 | mobileMTRendering:
350 | Android: 1
351 | iPhone: 1
352 | tvOS: 1
353 | m_BuildTargetGroupLightmapEncodingQuality:
354 | - m_BuildTarget: Android
355 | m_EncodingQuality: 1
356 | - m_BuildTarget: iPhone
357 | m_EncodingQuality: 1
358 | - m_BuildTarget: tvOS
359 | m_EncodingQuality: 1
360 | m_BuildTargetGroupHDRCubemapEncodingQuality:
361 | - m_BuildTarget: Android
362 | m_EncodingQuality: 1
363 | - m_BuildTarget: iPhone
364 | m_EncodingQuality: 1
365 | - m_BuildTarget: tvOS
366 | m_EncodingQuality: 1
367 | m_BuildTargetGroupLightmapSettings: []
368 | m_BuildTargetGroupLoadStoreDebugModeSettings: []
369 | m_BuildTargetNormalMapEncoding:
370 | - m_BuildTarget: Android
371 | m_Encoding: 1
372 | - m_BuildTarget: iPhone
373 | m_Encoding: 1
374 | - m_BuildTarget: tvOS
375 | m_Encoding: 1
376 | m_BuildTargetDefaultTextureCompressionFormat:
377 | - m_BuildTarget: Android
378 | m_Format: 3
379 | playModeTestRunnerEnabled: 0
380 | runPlayModeTestAsEditModeTest: 0
381 | actionOnDotNetUnhandledException: 1
382 | enableInternalProfiler: 0
383 | logObjCUncaughtExceptions: 1
384 | enableCrashReportAPI: 0
385 | cameraUsageDescription:
386 | locationUsageDescription:
387 | microphoneUsageDescription:
388 | bluetoothUsageDescription:
389 | macOSTargetOSVersion: 10.13.0
390 | switchNMETAOverride:
391 | switchNetLibKey:
392 | switchSocketMemoryPoolSize: 6144
393 | switchSocketAllocatorPoolSize: 128
394 | switchSocketConcurrencyLimit: 14
395 | switchScreenResolutionBehavior: 2
396 | switchUseCPUProfiler: 0
397 | switchUseGOLDLinker: 0
398 | switchLTOSetting: 0
399 | switchApplicationID: 0x01004b9000490000
400 | switchNSODependencies:
401 | switchCompilerFlags:
402 | switchTitleNames_0:
403 | switchTitleNames_1:
404 | switchTitleNames_2:
405 | switchTitleNames_3:
406 | switchTitleNames_4:
407 | switchTitleNames_5:
408 | switchTitleNames_6:
409 | switchTitleNames_7:
410 | switchTitleNames_8:
411 | switchTitleNames_9:
412 | switchTitleNames_10:
413 | switchTitleNames_11:
414 | switchTitleNames_12:
415 | switchTitleNames_13:
416 | switchTitleNames_14:
417 | switchTitleNames_15:
418 | switchPublisherNames_0:
419 | switchPublisherNames_1:
420 | switchPublisherNames_2:
421 | switchPublisherNames_3:
422 | switchPublisherNames_4:
423 | switchPublisherNames_5:
424 | switchPublisherNames_6:
425 | switchPublisherNames_7:
426 | switchPublisherNames_8:
427 | switchPublisherNames_9:
428 | switchPublisherNames_10:
429 | switchPublisherNames_11:
430 | switchPublisherNames_12:
431 | switchPublisherNames_13:
432 | switchPublisherNames_14:
433 | switchPublisherNames_15:
434 | switchIcons_0: {fileID: 0}
435 | switchIcons_1: {fileID: 0}
436 | switchIcons_2: {fileID: 0}
437 | switchIcons_3: {fileID: 0}
438 | switchIcons_4: {fileID: 0}
439 | switchIcons_5: {fileID: 0}
440 | switchIcons_6: {fileID: 0}
441 | switchIcons_7: {fileID: 0}
442 | switchIcons_8: {fileID: 0}
443 | switchIcons_9: {fileID: 0}
444 | switchIcons_10: {fileID: 0}
445 | switchIcons_11: {fileID: 0}
446 | switchIcons_12: {fileID: 0}
447 | switchIcons_13: {fileID: 0}
448 | switchIcons_14: {fileID: 0}
449 | switchIcons_15: {fileID: 0}
450 | switchSmallIcons_0: {fileID: 0}
451 | switchSmallIcons_1: {fileID: 0}
452 | switchSmallIcons_2: {fileID: 0}
453 | switchSmallIcons_3: {fileID: 0}
454 | switchSmallIcons_4: {fileID: 0}
455 | switchSmallIcons_5: {fileID: 0}
456 | switchSmallIcons_6: {fileID: 0}
457 | switchSmallIcons_7: {fileID: 0}
458 | switchSmallIcons_8: {fileID: 0}
459 | switchSmallIcons_9: {fileID: 0}
460 | switchSmallIcons_10: {fileID: 0}
461 | switchSmallIcons_11: {fileID: 0}
462 | switchSmallIcons_12: {fileID: 0}
463 | switchSmallIcons_13: {fileID: 0}
464 | switchSmallIcons_14: {fileID: 0}
465 | switchSmallIcons_15: {fileID: 0}
466 | switchManualHTML:
467 | switchAccessibleURLs:
468 | switchLegalInformation:
469 | switchMainThreadStackSize: 1048576
470 | switchPresenceGroupId:
471 | switchLogoHandling: 0
472 | switchReleaseVersion: 0
473 | switchDisplayVersion: 1.0.0
474 | switchStartupUserAccount: 0
475 | switchSupportedLanguagesMask: 0
476 | switchLogoType: 0
477 | switchApplicationErrorCodeCategory:
478 | switchUserAccountSaveDataSize: 0
479 | switchUserAccountSaveDataJournalSize: 0
480 | switchApplicationAttribute: 0
481 | switchCardSpecSize: -1
482 | switchCardSpecClock: -1
483 | switchRatingsMask: 0
484 | switchRatingsInt_0: 0
485 | switchRatingsInt_1: 0
486 | switchRatingsInt_2: 0
487 | switchRatingsInt_3: 0
488 | switchRatingsInt_4: 0
489 | switchRatingsInt_5: 0
490 | switchRatingsInt_6: 0
491 | switchRatingsInt_7: 0
492 | switchRatingsInt_8: 0
493 | switchRatingsInt_9: 0
494 | switchRatingsInt_10: 0
495 | switchRatingsInt_11: 0
496 | switchRatingsInt_12: 0
497 | switchLocalCommunicationIds_0:
498 | switchLocalCommunicationIds_1:
499 | switchLocalCommunicationIds_2:
500 | switchLocalCommunicationIds_3:
501 | switchLocalCommunicationIds_4:
502 | switchLocalCommunicationIds_5:
503 | switchLocalCommunicationIds_6:
504 | switchLocalCommunicationIds_7:
505 | switchParentalControl: 0
506 | switchAllowsScreenshot: 1
507 | switchAllowsVideoCapturing: 1
508 | switchAllowsRuntimeAddOnContentInstall: 0
509 | switchDataLossConfirmation: 0
510 | switchUserAccountLockEnabled: 0
511 | switchSystemResourceMemory: 16777216
512 | switchSupportedNpadStyles: 22
513 | switchNativeFsCacheSize: 32
514 | switchIsHoldTypeHorizontal: 0
515 | switchSupportedNpadCount: 8
516 | switchEnableTouchScreen: 1
517 | switchSocketConfigEnabled: 0
518 | switchTcpInitialSendBufferSize: 32
519 | switchTcpInitialReceiveBufferSize: 64
520 | switchTcpAutoSendBufferSizeMax: 256
521 | switchTcpAutoReceiveBufferSizeMax: 256
522 | switchUdpSendBufferSize: 9
523 | switchUdpReceiveBufferSize: 42
524 | switchSocketBufferEfficiency: 4
525 | switchSocketInitializeEnabled: 1
526 | switchNetworkInterfaceManagerInitializeEnabled: 1
527 | switchPlayerConnectionEnabled: 1
528 | switchUseNewStyleFilepaths: 1
529 | switchUseLegacyFmodPriorities: 0
530 | switchUseMicroSleepForYield: 1
531 | switchEnableRamDiskSupport: 0
532 | switchMicroSleepForYieldTime: 25
533 | switchRamDiskSpaceSize: 12
534 | ps4NPAgeRating: 12
535 | ps4NPTitleSecret:
536 | ps4NPTrophyPackPath:
537 | ps4ParentalLevel: 11
538 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000
539 | ps4Category: 0
540 | ps4MasterVersion: 01.00
541 | ps4AppVersion: 01.00
542 | ps4AppType: 0
543 | ps4ParamSfxPath:
544 | ps4VideoOutPixelFormat: 0
545 | ps4VideoOutInitialWidth: 1920
546 | ps4VideoOutBaseModeInitialWidth: 1920
547 | ps4VideoOutReprojectionRate: 60
548 | ps4PronunciationXMLPath:
549 | ps4PronunciationSIGPath:
550 | ps4BackgroundImagePath:
551 | ps4StartupImagePath:
552 | ps4StartupImagesFolder:
553 | ps4IconImagesFolder:
554 | ps4SaveDataImagePath:
555 | ps4SdkOverride:
556 | ps4BGMPath:
557 | ps4ShareFilePath:
558 | ps4ShareOverlayImagePath:
559 | ps4PrivacyGuardImagePath:
560 | ps4ExtraSceSysFile:
561 | ps4NPtitleDatPath:
562 | ps4RemotePlayKeyAssignment: -1
563 | ps4RemotePlayKeyMappingDir:
564 | ps4PlayTogetherPlayerCount: 0
565 | ps4EnterButtonAssignment: 1
566 | ps4ApplicationParam1: 0
567 | ps4ApplicationParam2: 0
568 | ps4ApplicationParam3: 0
569 | ps4ApplicationParam4: 0
570 | ps4DownloadDataSize: 0
571 | ps4GarlicHeapSize: 2048
572 | ps4ProGarlicHeapSize: 2560
573 | playerPrefsMaxSize: 32768
574 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
575 | ps4pnSessions: 1
576 | ps4pnPresence: 1
577 | ps4pnFriends: 1
578 | ps4pnGameCustomData: 1
579 | playerPrefsSupport: 0
580 | enableApplicationExit: 0
581 | resetTempFolder: 1
582 | restrictedAudioUsageRights: 0
583 | ps4UseResolutionFallback: 0
584 | ps4ReprojectionSupport: 0
585 | ps4UseAudio3dBackend: 0
586 | ps4UseLowGarlicFragmentationMode: 1
587 | ps4SocialScreenEnabled: 0
588 | ps4ScriptOptimizationLevel: 0
589 | ps4Audio3dVirtualSpeakerCount: 14
590 | ps4attribCpuUsage: 0
591 | ps4PatchPkgPath:
592 | ps4PatchLatestPkgPath:
593 | ps4PatchChangeinfoPath:
594 | ps4PatchDayOne: 0
595 | ps4attribUserManagement: 0
596 | ps4attribMoveSupport: 0
597 | ps4attrib3DSupport: 0
598 | ps4attribShareSupport: 0
599 | ps4attribExclusiveVR: 0
600 | ps4disableAutoHideSplash: 0
601 | ps4videoRecordingFeaturesUsed: 0
602 | ps4contentSearchFeaturesUsed: 0
603 | ps4CompatibilityPS5: 0
604 | ps4AllowPS5Detection: 0
605 | ps4GPU800MHz: 1
606 | ps4attribEyeToEyeDistanceSettingVR: 0
607 | ps4IncludedModules: []
608 | ps4attribVROutputEnabled: 0
609 | monoEnv:
610 | splashScreenBackgroundSourceLandscape: {fileID: 0}
611 | splashScreenBackgroundSourcePortrait: {fileID: 0}
612 | blurSplashScreenBackground: 1
613 | spritePackerPolicy:
614 | webGLMemorySize: 16
615 | webGLExceptionSupport: 1
616 | webGLNameFilesAsHashes: 0
617 | webGLShowDiagnostics: 0
618 | webGLDataCaching: 1
619 | webGLDebugSymbols: 0
620 | webGLEmscriptenArgs:
621 | webGLModulesDirectory:
622 | webGLTemplate: APPLICATION:Default
623 | webGLAnalyzeBuildSize: 0
624 | webGLUseEmbeddedResources: 0
625 | webGLCompressionFormat: 1
626 | webGLWasmArithmeticExceptions: 0
627 | webGLLinkerTarget: 1
628 | webGLThreadsSupport: 0
629 | webGLDecompressionFallback: 0
630 | webGLInitialMemorySize: 32
631 | webGLMaximumMemorySize: 2048
632 | webGLMemoryGrowthMode: 2
633 | webGLMemoryLinearGrowthStep: 16
634 | webGLMemoryGeometricGrowthStep: 0.2
635 | webGLMemoryGeometricGrowthCap: 96
636 | webGLPowerPreference: 2
637 | scriptingDefineSymbols: {}
638 | additionalCompilerArguments: {}
639 | platformArchitecture: {}
640 | scriptingBackend: {}
641 | il2cppCompilerConfiguration: {}
642 | il2cppCodeGeneration: {}
643 | managedStrippingLevel:
644 | EmbeddedLinux: 1
645 | GameCoreScarlett: 1
646 | GameCoreXboxOne: 1
647 | Nintendo Switch: 1
648 | PS4: 1
649 | PS5: 1
650 | QNX: 1
651 | Stadia: 1
652 | WebGL: 1
653 | Windows Store Apps: 1
654 | XboxOne: 1
655 | iPhone: 1
656 | tvOS: 1
657 | incrementalIl2cppBuild: {}
658 | suppressCommonWarnings: 1
659 | allowUnsafeCode: 0
660 | useDeterministicCompilation: 1
661 | selectedPlatform: 0
662 | additionalIl2CppArgs:
663 | scriptingRuntimeVersion: 1
664 | gcIncremental: 1
665 | gcWBarrierValidation: 0
666 | apiCompatibilityLevelPerPlatform: {}
667 | m_RenderingPath: 1
668 | m_MobileRenderingPath: 1
669 | metroPackageName: solo2yolo
670 | metroPackageVersion:
671 | metroCertificatePath:
672 | metroCertificatePassword:
673 | metroCertificateSubject:
674 | metroCertificateIssuer:
675 | metroCertificateNotAfter: 0000000000000000
676 | metroApplicationDescription: solo2yolo
677 | wsaImages: {}
678 | metroTileShortName:
679 | metroTileShowName: 0
680 | metroMediumTileShowName: 0
681 | metroLargeTileShowName: 0
682 | metroWideTileShowName: 0
683 | metroSupportStreamingInstall: 0
684 | metroLastRequiredScene: 0
685 | metroDefaultTileSize: 1
686 | metroTileForegroundText: 2
687 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
688 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
689 | metroSplashScreenUseBackgroundColor: 0
690 | platformCapabilities: {}
691 | metroTargetDeviceFamilies: {}
692 | metroFTAName:
693 | metroFTAFileTypes: []
694 | metroProtocolName:
695 | vcxProjDefaultLanguage:
696 | XboxOneProductId:
697 | XboxOneUpdateKey:
698 | XboxOneSandboxId:
699 | XboxOneContentId:
700 | XboxOneTitleId:
701 | XboxOneSCId:
702 | XboxOneGameOsOverridePath:
703 | XboxOnePackagingOverridePath:
704 | XboxOneAppManifestOverridePath:
705 | XboxOneVersion: 1.0.0.0
706 | XboxOnePackageEncryption: 0
707 | XboxOnePackageUpdateGranularity: 2
708 | XboxOneDescription:
709 | XboxOneLanguage:
710 | - enus
711 | XboxOneCapability: []
712 | XboxOneGameRating: {}
713 | XboxOneIsContentPackage: 0
714 | XboxOneEnhancedXboxCompatibilityMode: 0
715 | XboxOneEnableGPUVariability: 1
716 | XboxOneSockets: {}
717 | XboxOneSplashScreen: {fileID: 0}
718 | XboxOneAllowedProductIds: []
719 | XboxOnePersistentLocalStorageSize: 0
720 | XboxOneXTitleMemory: 8
721 | XboxOneOverrideIdentityName:
722 | XboxOneOverrideIdentityPublisher:
723 | vrEditorSettings: {}
724 | cloudServicesEnabled:
725 | UNet: 1
726 | luminIcon:
727 | m_Name:
728 | m_ModelFolderPath:
729 | m_PortalFolderPath:
730 | luminCert:
731 | m_CertPath:
732 | m_SignPackage: 1
733 | luminIsChannelApp: 0
734 | luminVersion:
735 | m_VersionCode: 1
736 | m_VersionName:
737 | hmiPlayerDataPath:
738 | hmiForceSRGBBlit: 1
739 | embeddedLinuxEnableGamepadInput: 1
740 | hmiLogStartupTiming: 0
741 | hmiCpuConfiguration:
742 | apiCompatibilityLevel: 6
743 | activeInputHandler: 0
744 | windowsGamepadBackendHint: 0
745 | cloudProjectId:
746 | framebufferDepthMemorylessMode: 0
747 | qualitySettingsNames: []
748 | projectName:
749 | organizationId:
750 | cloudEnabled: 0
751 | legacyClampBlendShapeWeights: 0
752 | hmiLoadingImage: {fileID: 0}
753 | platformRequiresReadableAssets: 0
754 | virtualTexturingSupportEnabled: 0
755 | insecureHttpOption: 0
756 |
--------------------------------------------------------------------------------