1 | -Smoke Regulation | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -<component name="ProjectCodeStyleConfiguration"> | ||
2 | - <code_scheme name="Project" version="173"> | ||
3 | - <codeStyleSettings language="XML"> | ||
4 | - <indentOptions> | ||
5 | - <option name="CONTINUATION_INDENT_SIZE" value="4" /> | ||
6 | - </indentOptions> | ||
7 | - <arrangement> | ||
8 | - <rules> | ||
9 | - <section> | ||
10 | - <rule> | ||
11 | - <match> | ||
12 | - <AND> | ||
13 | - <NAME>xmlns:android</NAME> | ||
14 | - <XML_ATTRIBUTE /> | ||
15 | - <XML_NAMESPACE>^$</XML_NAMESPACE> | ||
16 | - </AND> | ||
17 | - </match> | ||
18 | - </rule> | ||
19 | - </section> | ||
20 | - <section> | ||
21 | - <rule> | ||
22 | - <match> | ||
23 | - <AND> | ||
24 | - <NAME>xmlns:.*</NAME> | ||
25 | - <XML_ATTRIBUTE /> | ||
26 | - <XML_NAMESPACE>^$</XML_NAMESPACE> | ||
27 | - </AND> | ||
28 | - </match> | ||
29 | - <order>BY_NAME</order> | ||
30 | - </rule> | ||
31 | - </section> | ||
32 | - <section> | ||
33 | - <rule> | ||
34 | - <match> | ||
35 | - <AND> | ||
36 | - <NAME>.*:id</NAME> | ||
37 | - <XML_ATTRIBUTE /> | ||
38 | - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> | ||
39 | - </AND> | ||
40 | - </match> | ||
41 | - </rule> | ||
42 | - </section> | ||
43 | - <section> | ||
44 | - <rule> | ||
45 | - <match> | ||
46 | - <AND> | ||
47 | - <NAME>.*:name</NAME> | ||
48 | - <XML_ATTRIBUTE /> | ||
49 | - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> | ||
50 | - </AND> | ||
51 | - </match> | ||
52 | - </rule> | ||
53 | - </section> | ||
54 | - <section> | ||
55 | - <rule> | ||
56 | - <match> | ||
57 | - <AND> | ||
58 | - <NAME>name</NAME> | ||
59 | - <XML_ATTRIBUTE /> | ||
60 | - <XML_NAMESPACE>^$</XML_NAMESPACE> | ||
61 | - </AND> | ||
62 | - </match> | ||
63 | - </rule> | ||
64 | - </section> | ||
65 | - <section> | ||
66 | - <rule> | ||
67 | - <match> | ||
68 | - <AND> | ||
69 | - <NAME>style</NAME> | ||
70 | - <XML_ATTRIBUTE /> | ||
71 | - <XML_NAMESPACE>^$</XML_NAMESPACE> | ||
72 | - </AND> | ||
73 | - </match> | ||
74 | - </rule> | ||
75 | - </section> | ||
76 | - <section> | ||
77 | - <rule> | ||
78 | - <match> | ||
79 | - <AND> | ||
80 | - <NAME>.*</NAME> | ||
81 | - <XML_ATTRIBUTE /> | ||
82 | - <XML_NAMESPACE>^$</XML_NAMESPACE> | ||
83 | - </AND> | ||
84 | - </match> | ||
85 | - <order>BY_NAME</order> | ||
86 | - </rule> | ||
87 | - </section> | ||
88 | - <section> | ||
89 | - <rule> | ||
90 | - <match> | ||
91 | - <AND> | ||
92 | - <NAME>.*</NAME> | ||
93 | - <XML_ATTRIBUTE /> | ||
94 | - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> | ||
95 | - </AND> | ||
96 | - </match> | ||
97 | - <order>ANDROID_ATTRIBUTE_ORDER</order> | ||
98 | - </rule> | ||
99 | - </section> | ||
100 | - <section> | ||
101 | - <rule> | ||
102 | - <match> | ||
103 | - <AND> | ||
104 | - <NAME>.*</NAME> | ||
105 | - <XML_ATTRIBUTE /> | ||
106 | - <XML_NAMESPACE>.*</XML_NAMESPACE> | ||
107 | - </AND> | ||
108 | - </match> | ||
109 | - <order>BY_NAME</order> | ||
110 | - </rule> | ||
111 | - </section> | ||
112 | - </rules> | ||
113 | - </arrangement> | ||
114 | - </codeStyleSettings> | ||
115 | - </code_scheme> | ||
116 | -</component> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<project version="4"> | ||
3 | - <component name="GradleSettings"> | ||
4 | - <option name="linkedExternalProjectsSettings"> | ||
5 | - <GradleProjectSettings> | ||
6 | - <compositeConfiguration> | ||
7 | - <compositeBuild compositeDefinitionSource="SCRIPT" /> | ||
8 | - </compositeConfiguration> | ||
9 | - <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||
10 | - <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||
11 | - <option name="resolveModulePerSourceSet" value="false" /> | ||
12 | - <option name="testRunner" value="PLATFORM" /> | ||
13 | - </GradleProjectSettings> | ||
14 | - </option> | ||
15 | - </component> | ||
16 | -</project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<project version="4"> | ||
3 | - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | ||
4 | - <output url="file://$PROJECT_DIR$/build/classes" /> | ||
5 | - </component> | ||
6 | - <component name="ProjectType"> | ||
7 | - <option name="id" value="Android" /> | ||
8 | - </component> | ||
9 | -</project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<project version="4"> | ||
3 | - <component name="RunConfigurationProducerService"> | ||
4 | - <option name="ignoredProducers"> | ||
5 | - <set> | ||
6 | - <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> | ||
7 | - <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> | ||
8 | - <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> | ||
9 | - </set> | ||
10 | - </option> | ||
11 | - </component> | ||
12 | -</project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -/build |
1 | -apply plugin: 'com.android.application' | ||
2 | - | ||
3 | -android { | ||
4 | - compileSdkVersion 29 | ||
5 | - buildToolsVersion "29.0.2" | ||
6 | - defaultConfig { | ||
7 | - applicationId "com.example.smokeregulation" | ||
8 | - minSdkVersion 24 | ||
9 | - targetSdkVersion 29 | ||
10 | - versionCode 1 | ||
11 | - versionName "1.0" | ||
12 | - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||
13 | - } | ||
14 | - buildTypes { | ||
15 | - release { | ||
16 | - minifyEnabled false | ||
17 | - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | ||
18 | - } | ||
19 | - } | ||
20 | -} | ||
21 | - | ||
22 | -dependencies { | ||
23 | - implementation fileTree(dir: 'libs', include: ['*.jar']) | ||
24 | - implementation 'androidx.appcompat:appcompat:1.0.2' | ||
25 | - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | ||
26 | - testImplementation 'junit:junit:4.12' | ||
27 | - androidTestImplementation 'androidx.test.ext:junit:1.1.0' | ||
28 | - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' | ||
29 | -} |
1 | -# Add project specific ProGuard rules here. | ||
2 | -# You can control the set of applied configuration files using the | ||
3 | -# proguardFiles setting in build.gradle. | ||
4 | -# | ||
5 | -# For more details, see | ||
6 | -# http://developer.android.com/guide/developing/tools/proguard.html | ||
7 | - | ||
8 | -# If your project uses WebView with JS, uncomment the following | ||
9 | -# and specify the fully qualified class name to the JavaScript interface | ||
10 | -# class: | ||
11 | -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
12 | -# public *; | ||
13 | -#} | ||
14 | - | ||
15 | -# Uncomment this to preserve the line number information for | ||
16 | -# debugging stack traces. | ||
17 | -#-keepattributes SourceFile,LineNumberTable | ||
18 | - | ||
19 | -# If you keep the line number information, uncomment this to | ||
20 | -# hide the original source file name. | ||
21 | -#-renamesourcefileattribute SourceFile |
1 | -package com.example.smokeregulation; | ||
2 | - | ||
3 | -import android.content.Context; | ||
4 | - | ||
5 | -import androidx.test.platform.app.InstrumentationRegistry; | ||
6 | -import androidx.test.ext.junit.runners.AndroidJUnit4; | ||
7 | - | ||
8 | -import org.junit.Test; | ||
9 | -import org.junit.runner.RunWith; | ||
10 | - | ||
11 | -import static org.junit.Assert.*; | ||
12 | - | ||
13 | -/** | ||
14 | - * Instrumented test, which will execute on an Android device. | ||
15 | - * | ||
16 | - * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | ||
17 | - */ | ||
18 | -@RunWith(AndroidJUnit4.class) | ||
19 | -public class ExampleInstrumentedTest { | ||
20 | - @Test | ||
21 | - public void useAppContext() { | ||
22 | - // Context of the app under test. | ||
23 | - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); | ||
24 | - | ||
25 | - assertEquals("com.example.smokeregulation", appContext.getPackageName()); | ||
26 | - } | ||
27 | -} |
1 | -<?xml version="1.0" encoding="utf-8"?> | ||
2 | -<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
3 | - package="com.example.smokeregulation"> | ||
4 | - | ||
5 | - <application | ||
6 | - android:allowBackup="true" | ||
7 | - android:icon="@mipmap/ic_launcher" | ||
8 | - android:label="@string/app_name" | ||
9 | - android:roundIcon="@mipmap/ic_launcher_round" | ||
10 | - android:supportsRtl="true" | ||
11 | - android:theme="@style/AppTheme.NoActionBar"> | ||
12 | - <activity android:name=".RegisterActivity"> | ||
13 | - <intent-filter> | ||
14 | - <action android:name="android.intent.action.MAIN" /> | ||
15 | - | ||
16 | - <category android:name="android.intent.category.LAUNCHER" /> | ||
17 | - </intent-filter> | ||
18 | - </activity> | ||
19 | - </application> | ||
20 | - | ||
21 | -</manifest> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -package com.example.smokeregulation; | ||
2 | - | ||
3 | -import androidx.appcompat.app.AppCompatActivity; | ||
4 | - | ||
5 | -import android.os.Bundle; | ||
6 | - | ||
7 | -public class RegisterActivity extends AppCompatActivity { | ||
8 | - | ||
9 | - @Override | ||
10 | - protected void onCreate(Bundle savedInstanceState) { | ||
11 | - super.onCreate(savedInstanceState); | ||
12 | - setContentView(R.layout.activity_register); | ||
13 | - } | ||
14 | -} |
1 | -<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | - xmlns:aapt="http://schemas.android.com/aapt" | ||
3 | - android:width="108dp" | ||
4 | - android:height="108dp" | ||
5 | - android:viewportWidth="108" | ||
6 | - android:viewportHeight="108"> | ||
7 | - <path | ||
8 | - android:fillType="evenOdd" | ||
9 | - android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z" | ||
10 | - android:strokeWidth="1" | ||
11 | - android:strokeColor="#00000000"> | ||
12 | - <aapt:attr name="android:fillColor"> | ||
13 | - <gradient | ||
14 | - android:endX="78.5885" | ||
15 | - android:endY="90.9159" | ||
16 | - android:startX="48.7653" | ||
17 | - android:startY="61.0927" | ||
18 | - android:type="linear"> | ||
19 | - <item | ||
20 | - android:color="#44000000" | ||
21 | - android:offset="0.0" /> | ||
22 | - <item | ||
23 | - android:color="#00000000" | ||
24 | - android:offset="1.0" /> | ||
25 | - </gradient> | ||
26 | - </aapt:attr> | ||
27 | - </path> | ||
28 | - <path | ||
29 | - android:fillColor="#FFFFFF" | ||
30 | - android:fillType="nonZero" | ||
31 | - android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z" | ||
32 | - android:strokeWidth="1" | ||
33 | - android:strokeColor="#00000000" /> | ||
34 | -</vector> |
1 | -<vector android:height="24dp" android:tint="#FFFFFF" | ||
2 | - android:viewportHeight="24.0" android:viewportWidth="24.0" | ||
3 | - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> | ||
4 | - <path android:fillColor="#FF000000" android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z"/> | ||
5 | -</vector> |
1 | -<?xml version="1.0" encoding="utf-8"?> | ||
2 | -<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
3 | - android:width="108dp" | ||
4 | - android:height="108dp" | ||
5 | - android:viewportWidth="108" | ||
6 | - android:viewportHeight="108"> | ||
7 | - <path | ||
8 | - android:fillColor="#008577" | ||
9 | - android:pathData="M0,0h108v108h-108z" /> | ||
10 | - <path | ||
11 | - android:fillColor="#00000000" | ||
12 | - android:pathData="M9,0L9,108" | ||
13 | - android:strokeWidth="0.8" | ||
14 | - android:strokeColor="#33FFFFFF" /> | ||
15 | - <path | ||
16 | - android:fillColor="#00000000" | ||
17 | - android:pathData="M19,0L19,108" | ||
18 | - android:strokeWidth="0.8" | ||
19 | - android:strokeColor="#33FFFFFF" /> | ||
20 | - <path | ||
21 | - android:fillColor="#00000000" | ||
22 | - android:pathData="M29,0L29,108" | ||
23 | - android:strokeWidth="0.8" | ||
24 | - android:strokeColor="#33FFFFFF" /> | ||
25 | - <path | ||
26 | - android:fillColor="#00000000" | ||
27 | - android:pathData="M39,0L39,108" | ||
28 | - android:strokeWidth="0.8" | ||
29 | - android:strokeColor="#33FFFFFF" /> | ||
30 | - <path | ||
31 | - android:fillColor="#00000000" | ||
32 | - android:pathData="M49,0L49,108" | ||
33 | - android:strokeWidth="0.8" | ||
34 | - android:strokeColor="#33FFFFFF" /> | ||
35 | - <path | ||
36 | - android:fillColor="#00000000" | ||
37 | - android:pathData="M59,0L59,108" | ||
38 | - android:strokeWidth="0.8" | ||
39 | - android:strokeColor="#33FFFFFF" /> | ||
40 | - <path | ||
41 | - android:fillColor="#00000000" | ||
42 | - android:pathData="M69,0L69,108" | ||
43 | - android:strokeWidth="0.8" | ||
44 | - android:strokeColor="#33FFFFFF" /> | ||
45 | - <path | ||
46 | - android:fillColor="#00000000" | ||
47 | - android:pathData="M79,0L79,108" | ||
48 | - android:strokeWidth="0.8" | ||
49 | - android:strokeColor="#33FFFFFF" /> | ||
50 | - <path | ||
51 | - android:fillColor="#00000000" | ||
52 | - android:pathData="M89,0L89,108" | ||
53 | - android:strokeWidth="0.8" | ||
54 | - android:strokeColor="#33FFFFFF" /> | ||
55 | - <path | ||
56 | - android:fillColor="#00000000" | ||
57 | - android:pathData="M99,0L99,108" | ||
58 | - android:strokeWidth="0.8" | ||
59 | - android:strokeColor="#33FFFFFF" /> | ||
60 | - <path | ||
61 | - android:fillColor="#00000000" | ||
62 | - android:pathData="M0,9L108,9" | ||
63 | - android:strokeWidth="0.8" | ||
64 | - android:strokeColor="#33FFFFFF" /> | ||
65 | - <path | ||
66 | - android:fillColor="#00000000" | ||
67 | - android:pathData="M0,19L108,19" | ||
68 | - android:strokeWidth="0.8" | ||
69 | - android:strokeColor="#33FFFFFF" /> | ||
70 | - <path | ||
71 | - android:fillColor="#00000000" | ||
72 | - android:pathData="M0,29L108,29" | ||
73 | - android:strokeWidth="0.8" | ||
74 | - android:strokeColor="#33FFFFFF" /> | ||
75 | - <path | ||
76 | - android:fillColor="#00000000" | ||
77 | - android:pathData="M0,39L108,39" | ||
78 | - android:strokeWidth="0.8" | ||
79 | - android:strokeColor="#33FFFFFF" /> | ||
80 | - <path | ||
81 | - android:fillColor="#00000000" | ||
82 | - android:pathData="M0,49L108,49" | ||
83 | - android:strokeWidth="0.8" | ||
84 | - android:strokeColor="#33FFFFFF" /> | ||
85 | - <path | ||
86 | - android:fillColor="#00000000" | ||
87 | - android:pathData="M0,59L108,59" | ||
88 | - android:strokeWidth="0.8" | ||
89 | - android:strokeColor="#33FFFFFF" /> | ||
90 | - <path | ||
91 | - android:fillColor="#00000000" | ||
92 | - android:pathData="M0,69L108,69" | ||
93 | - android:strokeWidth="0.8" | ||
94 | - android:strokeColor="#33FFFFFF" /> | ||
95 | - <path | ||
96 | - android:fillColor="#00000000" | ||
97 | - android:pathData="M0,79L108,79" | ||
98 | - android:strokeWidth="0.8" | ||
99 | - android:strokeColor="#33FFFFFF" /> | ||
100 | - <path | ||
101 | - android:fillColor="#00000000" | ||
102 | - android:pathData="M0,89L108,89" | ||
103 | - android:strokeWidth="0.8" | ||
104 | - android:strokeColor="#33FFFFFF" /> | ||
105 | - <path | ||
106 | - android:fillColor="#00000000" | ||
107 | - android:pathData="M0,99L108,99" | ||
108 | - android:strokeWidth="0.8" | ||
109 | - android:strokeColor="#33FFFFFF" /> | ||
110 | - <path | ||
111 | - android:fillColor="#00000000" | ||
112 | - android:pathData="M19,29L89,29" | ||
113 | - android:strokeWidth="0.8" | ||
114 | - android:strokeColor="#33FFFFFF" /> | ||
115 | - <path | ||
116 | - android:fillColor="#00000000" | ||
117 | - android:pathData="M19,39L89,39" | ||
118 | - android:strokeWidth="0.8" | ||
119 | - android:strokeColor="#33FFFFFF" /> | ||
120 | - <path | ||
121 | - android:fillColor="#00000000" | ||
122 | - android:pathData="M19,49L89,49" | ||
123 | - android:strokeWidth="0.8" | ||
124 | - android:strokeColor="#33FFFFFF" /> | ||
125 | - <path | ||
126 | - android:fillColor="#00000000" | ||
127 | - android:pathData="M19,59L89,59" | ||
128 | - android:strokeWidth="0.8" | ||
129 | - android:strokeColor="#33FFFFFF" /> | ||
130 | - <path | ||
131 | - android:fillColor="#00000000" | ||
132 | - android:pathData="M19,69L89,69" | ||
133 | - android:strokeWidth="0.8" | ||
134 | - android:strokeColor="#33FFFFFF" /> | ||
135 | - <path | ||
136 | - android:fillColor="#00000000" | ||
137 | - android:pathData="M19,79L89,79" | ||
138 | - android:strokeWidth="0.8" | ||
139 | - android:strokeColor="#33FFFFFF" /> | ||
140 | - <path | ||
141 | - android:fillColor="#00000000" | ||
142 | - android:pathData="M29,19L29,89" | ||
143 | - android:strokeWidth="0.8" | ||
144 | - android:strokeColor="#33FFFFFF" /> | ||
145 | - <path | ||
146 | - android:fillColor="#00000000" | ||
147 | - android:pathData="M39,19L39,89" | ||
148 | - android:strokeWidth="0.8" | ||
149 | - android:strokeColor="#33FFFFFF" /> | ||
150 | - <path | ||
151 | - android:fillColor="#00000000" | ||
152 | - android:pathData="M49,19L49,89" | ||
153 | - android:strokeWidth="0.8" | ||
154 | - android:strokeColor="#33FFFFFF" /> | ||
155 | - <path | ||
156 | - android:fillColor="#00000000" | ||
157 | - android:pathData="M59,19L59,89" | ||
158 | - android:strokeWidth="0.8" | ||
159 | - android:strokeColor="#33FFFFFF" /> | ||
160 | - <path | ||
161 | - android:fillColor="#00000000" | ||
162 | - android:pathData="M69,19L69,89" | ||
163 | - android:strokeWidth="0.8" | ||
164 | - android:strokeColor="#33FFFFFF" /> | ||
165 | - <path | ||
166 | - android:fillColor="#00000000" | ||
167 | - android:pathData="M79,19L79,89" | ||
168 | - android:strokeWidth="0.8" | ||
169 | - android:strokeColor="#33FFFFFF" /> | ||
170 | -</vector> |
1 | -<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | - android:width="24dp" | ||
3 | - android:height="24dp" | ||
4 | - android:viewportWidth="24.0" | ||
5 | - android:viewportHeight="24.0"> | ||
6 | - <path | ||
7 | - android:fillColor="#FFFFFFFF" | ||
8 | - android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/> | ||
9 | -</vector> |
1 | -<vector xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | - android:width="24dp" | ||
3 | - android:height="24dp" | ||
4 | - android:viewportWidth="24.0" | ||
5 | - android:viewportHeight="24.0"> | ||
6 | - <path | ||
7 | - android:fillColor="#FFFFFFFF" | ||
8 | - android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/> | ||
9 | -</vector> |
11.5 KB
1 | -<?xml version="1.0" encoding="utf-8"?> | ||
2 | -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
3 | - xmlns:app="http://schemas.android.com/apk/res-auto" | ||
4 | - xmlns:tools="http://schemas.android.com/tools" | ||
5 | - android:layout_width="match_parent" | ||
6 | - android:layout_height="match_parent" | ||
7 | - tools:context=".RegisterActivity"> | ||
8 | - | ||
9 | - <LinearLayout | ||
10 | - android:layout_width="match_parent" | ||
11 | - android:layout_height="match_parent" | ||
12 | - android:orientation="vertical"> | ||
13 | - <LinearLayout | ||
14 | - android:layout_width="match_parent" | ||
15 | - android:layout_height="wrap_content" | ||
16 | - android:orientation="vertical" | ||
17 | - android:background="@color/colorPrimary"> | ||
18 | - <ImageView | ||
19 | - android:layout_width="125dp" | ||
20 | - android:layout_height="125dp" | ||
21 | - android:layout_gravity="center" | ||
22 | - android:layout_marginTop="20dp" | ||
23 | - android:src="@drawable/logo"/> | ||
24 | - <TextView | ||
25 | - android:layout_width="wrap_content" | ||
26 | - android:layout_height="wrap_content" | ||
27 | - android:layout_gravity="center" | ||
28 | - android:text="경희대" | ||
29 | - android:textColor="#FFFFFF" | ||
30 | - android:textSize="25dp" | ||
31 | - android:textStyle="bold" | ||
32 | - android:layout_marginTop="10dp" | ||
33 | - /> | ||
34 | - <TextView | ||
35 | - android:layout_width="wrap_content" | ||
36 | - android:layout_height="wrap_content" | ||
37 | - android:layout_gravity="center" | ||
38 | - android:text="등록 도우미" | ||
39 | - android:textColor="#FFFFFF" | ||
40 | - android:textSize="18dp" | ||
41 | - android:textStyle="bold" | ||
42 | - /> | ||
43 | - </LinearLayout> | ||
44 | - | ||
45 | - <LinearLayout | ||
46 | - android:layout_width="match_parent" | ||
47 | - android:layout_height="match_parent" | ||
48 | - android:orientation="vertical"> | ||
49 | - | ||
50 | - <EditText | ||
51 | - android:layout_width="280dp" | ||
52 | - android:layout_height="wrap_content" | ||
53 | - android:hint="아이디" | ||
54 | - android:layout_gravity="center" | ||
55 | - android:padding="10dp" | ||
56 | - android:textColor="#ffffff" | ||
57 | - android:textColorHint="#ffffff" | ||
58 | - android:id="@+id/idText" | ||
59 | - android:drawableStart="@drawable/ic_person_black_24dp" | ||
60 | - android:drawableLeft="@drawable/ic_person_black_24dp" | ||
61 | - android:layout_marginTop="50dp" | ||
62 | - android:background="@color/colorPrimary"/> | ||
63 | - | ||
64 | - <EditText | ||
65 | - android:inputType="textPassword" | ||
66 | - android:layout_width="280dp" | ||
67 | - android:layout_height="wrap_content" | ||
68 | - android:hint="비밀번호" | ||
69 | - android:layout_gravity="center" | ||
70 | - android:padding="10dp" | ||
71 | - android:textColor="#ffffff" | ||
72 | - android:textColorHint="#ffffff" | ||
73 | - android:id="@+id/passwordText" | ||
74 | - android:drawableStart="@drawable/ic_person_add_black_24dp" | ||
75 | - android:drawableLeft="@drawable/ic_person_add_black_24dp" | ||
76 | - android:layout_marginTop="10dp" | ||
77 | - android:background="@color/colorPrimary"/> | ||
78 | - | ||
79 | - <Button | ||
80 | - android:layout_width="280dp" | ||
81 | - android:layout_height="wrap_content" | ||
82 | - android:textSize="20dp" | ||
83 | - android:textStyle="bold" | ||
84 | - android:textColor="#ffffff" | ||
85 | - android:background="@color/colorPrimaryDark" | ||
86 | - android:text="로그인" | ||
87 | - android:layout_marginTop="10dp" | ||
88 | - android:layout_gravity="center"/> | ||
89 | - | ||
90 | - <TextView | ||
91 | - android:layout_width="wrap_content" | ||
92 | - android:layout_height="wrap_content" | ||
93 | - android:layout_gravity="center" | ||
94 | - android:textSize="18dp" | ||
95 | - android:layout_marginTop="10dp" | ||
96 | - android:text="회원가입" | ||
97 | - android:id="@+id/registerButton" | ||
98 | - | ||
99 | - </LinearLayout> | ||
100 | - | ||
101 | - | ||
102 | - </LinearLayout> | ||
103 | -</androidx.constraintlayout.widget.ConstraintLayout> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -<?xml version="1.0" encoding="utf-8"?> | ||
2 | -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
3 | - android:orientation="vertical" android:layout_width="match_parent" | ||
4 | - android:layout_height="match_parent"> | ||
5 | - | ||
6 | -</LinearLayout> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -<?xml version="1.0" encoding="utf-8"?> | ||
2 | -<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||
3 | - <background android:drawable="@drawable/ic_launcher_background" /> | ||
4 | - <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||
5 | -</adaptive-icon> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -<?xml version="1.0" encoding="utf-8"?> | ||
2 | -<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | ||
3 | - <background android:drawable="@drawable/ic_launcher_background" /> | ||
4 | - <foreground android:drawable="@drawable/ic_launcher_foreground" /> | ||
5 | -</adaptive-icon> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
2.89 KB
4.79 KB
2.01 KB
2.72 KB
4.38 KB
6.73 KB
6.24 KB
10.2 KB
8.91 KB
14.8 KB
1 | -<resources> | ||
2 | - | ||
3 | - <!-- Base application theme. --> | ||
4 | - <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> | ||
5 | - <!-- Customize your theme here. --> | ||
6 | - <item name="colorPrimary">@color/colorPrimary</item> | ||
7 | - <item name="colorPrimaryDark">@color/colorPrimaryDark</item> | ||
8 | - <item name="colorAccent">@color/colorAccent</item> | ||
9 | - </style> | ||
10 | - | ||
11 | - <style name= "AppTheme.NoActionBar"> | ||
12 | - <item name="windowActionBar">false</item> | ||
13 | - <item name="windowNoTitle">true</item> | ||
14 | - </style> | ||
15 | - | ||
16 | -</resources> |
1 | -package com.example.smokeregulation; | ||
2 | - | ||
3 | -import org.junit.Test; | ||
4 | - | ||
5 | -import static org.junit.Assert.*; | ||
6 | - | ||
7 | -/** | ||
8 | - * Example local unit test, which will execute on the development machine (host). | ||
9 | - * | ||
10 | - * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> | ||
11 | - */ | ||
12 | -public class ExampleUnitTest { | ||
13 | - @Test | ||
14 | - public void addition_isCorrect() { | ||
15 | - assertEquals(4, 2 + 2); | ||
16 | - } | ||
17 | -} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -// Top-level build file where you can add configuration options common to all sub-projects/modules. | ||
2 | - | ||
3 | -buildscript { | ||
4 | - repositories { | ||
5 | - google() | ||
6 | - jcenter() | ||
7 | - | ||
8 | - } | ||
9 | - dependencies { | ||
10 | - classpath 'com.android.tools.build:gradle:3.5.2' | ||
11 | - | ||
12 | - // NOTE: Do not place your application dependencies here; they belong | ||
13 | - // in the individual module build.gradle files | ||
14 | - } | ||
15 | -} | ||
16 | - | ||
17 | -allprojects { | ||
18 | - repositories { | ||
19 | - google() | ||
20 | - jcenter() | ||
21 | - | ||
22 | - } | ||
23 | -} | ||
24 | - | ||
25 | -task clean(type: Delete) { | ||
26 | - delete rootProject.buildDir | ||
27 | -} |
1 | -# Project-wide Gradle settings. | ||
2 | -# IDE (e.g. Android Studio) users: | ||
3 | -# Gradle settings configured through the IDE *will override* | ||
4 | -# any settings specified in this file. | ||
5 | -# For more details on how to configure your build environment visit | ||
6 | -# http://www.gradle.org/docs/current/userguide/build_environment.html | ||
7 | -# Specifies the JVM arguments used for the daemon process. | ||
8 | -# The setting is particularly useful for tweaking memory settings. | ||
9 | -org.gradle.jvmargs=-Xmx1536m | ||
10 | -# When configured, Gradle will run in incubating parallel mode. | ||
11 | -# This option should only be used with decoupled projects. More details, visit | ||
12 | -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | ||
13 | -# org.gradle.parallel=true | ||
14 | -# AndroidX package structure to make it clearer which packages are bundled with the | ||
15 | -# Android operating system, and which are packaged with your app's APK | ||
16 | -# https://developer.android.com/topic/libraries/support-library/androidx-rn | ||
17 | -android.useAndroidX=true | ||
18 | -# Automatically convert third-party libraries to use AndroidX | ||
19 | -android.enableJetifier=true | ||
20 | - |
1 | -#!/usr/bin/env sh | ||
2 | - | ||
3 | -############################################################################## | ||
4 | -## | ||
5 | -## Gradle start up script for UN*X | ||
6 | -## | ||
7 | -############################################################################## | ||
8 | - | ||
9 | -# Attempt to set APP_HOME | ||
10 | -# Resolve links: $0 may be a link | ||
11 | -PRG="$0" | ||
12 | -# Need this for relative symlinks. | ||
13 | -while [ -h "$PRG" ] ; do | ||
14 | - ls=`ls -ld "$PRG"` | ||
15 | - link=`expr "$ls" : '.*-> \(.*\)$'` | ||
16 | - if expr "$link" : '/.*' > /dev/null; then | ||
17 | - PRG="$link" | ||
18 | - else | ||
19 | - PRG=`dirname "$PRG"`"/$link" | ||
20 | - fi | ||
21 | -done | ||
22 | -SAVED="`pwd`" | ||
23 | -cd "`dirname \"$PRG\"`/" >/dev/null | ||
24 | -APP_HOME="`pwd -P`" | ||
25 | -cd "$SAVED" >/dev/null | ||
26 | - | ||
27 | -APP_NAME="Gradle" | ||
28 | -APP_BASE_NAME=`basename "$0"` | ||
29 | - | ||
30 | -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
31 | -DEFAULT_JVM_OPTS="" | ||
32 | - | ||
33 | -# Use the maximum available, or set MAX_FD != -1 to use that value. | ||
34 | -MAX_FD="maximum" | ||
35 | - | ||
36 | -warn () { | ||
37 | - echo "$*" | ||
38 | -} | ||
39 | - | ||
40 | -die () { | ||
41 | - echo | ||
42 | - echo "$*" | ||
43 | - echo | ||
44 | - exit 1 | ||
45 | -} | ||
46 | - | ||
47 | -# OS specific support (must be 'true' or 'false'). | ||
48 | -cygwin=false | ||
49 | -msys=false | ||
50 | -darwin=false | ||
51 | -nonstop=false | ||
52 | -case "`uname`" in | ||
53 | - CYGWIN* ) | ||
54 | - cygwin=true | ||
55 | - ;; | ||
56 | - Darwin* ) | ||
57 | - darwin=true | ||
58 | - ;; | ||
59 | - MINGW* ) | ||
60 | - msys=true | ||
61 | - ;; | ||
62 | - NONSTOP* ) | ||
63 | - nonstop=true | ||
64 | - ;; | ||
65 | -esac | ||
66 | - | ||
67 | -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||
68 | - | ||
69 | -# Determine the Java command to use to start the JVM. | ||
70 | -if [ -n "$JAVA_HOME" ] ; then | ||
71 | - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
72 | - # IBM's JDK on AIX uses strange locations for the executables | ||
73 | - JAVACMD="$JAVA_HOME/jre/sh/java" | ||
74 | - else | ||
75 | - JAVACMD="$JAVA_HOME/bin/java" | ||
76 | - fi | ||
77 | - if [ ! -x "$JAVACMD" ] ; then | ||
78 | - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||
79 | - | ||
80 | -Please set the JAVA_HOME variable in your environment to match the | ||
81 | -location of your Java installation." | ||
82 | - fi | ||
83 | -else | ||
84 | - JAVACMD="java" | ||
85 | - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
86 | - | ||
87 | -Please set the JAVA_HOME variable in your environment to match the | ||
88 | -location of your Java installation." | ||
89 | -fi | ||
90 | - | ||
91 | -# Increase the maximum file descriptors if we can. | ||
92 | -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | ||
93 | - MAX_FD_LIMIT=`ulimit -H -n` | ||
94 | - if [ $? -eq 0 ] ; then | ||
95 | - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||
96 | - MAX_FD="$MAX_FD_LIMIT" | ||
97 | - fi | ||
98 | - ulimit -n $MAX_FD | ||
99 | - if [ $? -ne 0 ] ; then | ||
100 | - warn "Could not set maximum file descriptor limit: $MAX_FD" | ||
101 | - fi | ||
102 | - else | ||
103 | - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||
104 | - fi | ||
105 | -fi | ||
106 | - | ||
107 | -# For Darwin, add options to specify how the application appears in the dock | ||
108 | -if $darwin; then | ||
109 | - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||
110 | -fi | ||
111 | - | ||
112 | -# For Cygwin, switch paths to Windows format before running java | ||
113 | -if $cygwin ; then | ||
114 | - APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||
115 | - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||
116 | - JAVACMD=`cygpath --unix "$JAVACMD"` | ||
117 | - | ||
118 | - # We build the pattern for arguments to be converted via cygpath | ||
119 | - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||
120 | - SEP="" | ||
121 | - for dir in $ROOTDIRSRAW ; do | ||
122 | - ROOTDIRS="$ROOTDIRS$SEP$dir" | ||
123 | - SEP="|" | ||
124 | - done | ||
125 | - OURCYGPATTERN="(^($ROOTDIRS))" | ||
126 | - # Add a user-defined pattern to the cygpath arguments | ||
127 | - if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||
128 | - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||
129 | - fi | ||
130 | - # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||
131 | - i=0 | ||
132 | - for arg in "$@" ; do | ||
133 | - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||
134 | - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | ||
135 | - | ||
136 | - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | ||
137 | - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||
138 | - else | ||
139 | - eval `echo args$i`="\"$arg\"" | ||
140 | - fi | ||
141 | - i=$((i+1)) | ||
142 | - done | ||
143 | - case $i in | ||
144 | - (0) set -- ;; | ||
145 | - (1) set -- "$args0" ;; | ||
146 | - (2) set -- "$args0" "$args1" ;; | ||
147 | - (3) set -- "$args0" "$args1" "$args2" ;; | ||
148 | - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||
149 | - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||
150 | - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||
151 | - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||
152 | - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||
153 | - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||
154 | - esac | ||
155 | -fi | ||
156 | - | ||
157 | -# Escape application args | ||
158 | -save () { | ||
159 | - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | ||
160 | - echo " " | ||
161 | -} | ||
162 | -APP_ARGS=$(save "$@") | ||
163 | - | ||
164 | -# Collect all arguments for the java command, following the shell quoting and substitution rules | ||
165 | -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | ||
166 | - | ||
167 | -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | ||
168 | -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | ||
169 | - cd "$(dirname "$0")" | ||
170 | -fi | ||
171 | - | ||
172 | -exec "$JAVACMD" "$@" |
1 | -@if "%DEBUG%" == "" @echo off | ||
2 | -@rem ########################################################################## | ||
3 | -@rem | ||
4 | -@rem Gradle startup script for Windows | ||
5 | -@rem | ||
6 | -@rem ########################################################################## | ||
7 | - | ||
8 | -@rem Set local scope for the variables with windows NT shell | ||
9 | -if "%OS%"=="Windows_NT" setlocal | ||
10 | - | ||
11 | -set DIRNAME=%~dp0 | ||
12 | -if "%DIRNAME%" == "" set DIRNAME=. | ||
13 | -set APP_BASE_NAME=%~n0 | ||
14 | -set APP_HOME=%DIRNAME% | ||
15 | - | ||
16 | -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
17 | -set DEFAULT_JVM_OPTS= | ||
18 | - | ||
19 | -@rem Find java.exe | ||
20 | -if defined JAVA_HOME goto findJavaFromJavaHome | ||
21 | - | ||
22 | -set JAVA_EXE=java.exe | ||
23 | -%JAVA_EXE% -version >NUL 2>&1 | ||
24 | -if "%ERRORLEVEL%" == "0" goto init | ||
25 | - | ||
26 | -echo. | ||
27 | -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
28 | -echo. | ||
29 | -echo Please set the JAVA_HOME variable in your environment to match the | ||
30 | -echo location of your Java installation. | ||
31 | - | ||
32 | -goto fail | ||
33 | - | ||
34 | -:findJavaFromJavaHome | ||
35 | -set JAVA_HOME=%JAVA_HOME:"=% | ||
36 | -set JAVA_EXE=%JAVA_HOME%/bin/java.exe | ||
37 | - | ||
38 | -if exist "%JAVA_EXE%" goto init | ||
39 | - | ||
40 | -echo. | ||
41 | -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | ||
42 | -echo. | ||
43 | -echo Please set the JAVA_HOME variable in your environment to match the | ||
44 | -echo location of your Java installation. | ||
45 | - | ||
46 | -goto fail | ||
47 | - | ||
48 | -:init | ||
49 | -@rem Get command-line arguments, handling Windows variants | ||
50 | - | ||
51 | -if not "%OS%" == "Windows_NT" goto win9xME_args | ||
52 | - | ||
53 | -:win9xME_args | ||
54 | -@rem Slurp the command line arguments. | ||
55 | -set CMD_LINE_ARGS= | ||
56 | -set _SKIP=2 | ||
57 | - | ||
58 | -:win9xME_args_slurp | ||
59 | -if "x%~1" == "x" goto execute | ||
60 | - | ||
61 | -set CMD_LINE_ARGS=%* | ||
62 | - | ||
63 | -:execute | ||
64 | -@rem Setup the command line | ||
65 | - | ||
66 | -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||
67 | - | ||
68 | -@rem Execute Gradle | ||
69 | -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||
70 | - | ||
71 | -:end | ||
72 | -@rem End local scope for the variables with windows NT shell | ||
73 | -if "%ERRORLEVEL%"=="0" goto mainEnd | ||
74 | - | ||
75 | -:fail | ||
76 | -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | ||
77 | -rem the _cmd.exe /c_ return code! | ||
78 | -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | ||
79 | -exit /b 1 | ||
80 | - | ||
81 | -:mainEnd | ||
82 | -if "%OS%"=="Windows_NT" endlocal | ||
83 | - | ||
84 | -:omega |
10.5 KB
114 KB
99.2 KB
167 KB
77.1 KB
185 KB
15 KB
61 KB
21.4 KB
122 KB
66.7 KB
48.7 KB
41.9 KB
254 KB
1 | -import cv2 | ||
2 | -import numpy as np | ||
3 | - | ||
4 | -def stackImages(scale,imgArray): #calculate convolution | ||
5 | - rows = len(imgArray) | ||
6 | - cols = len(imgArray[0]) | ||
7 | - rowsAvailable = isinstance(imgArray[0], list) | ||
8 | - width = imgArray[0][0].shape[1] | ||
9 | - height = imgArray[0][0].shape[0] | ||
10 | - if rowsAvailable: | ||
11 | - for x in range ( 0, rows): | ||
12 | - for y in range(0, cols): | ||
13 | - if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]: | ||
14 | - imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale) | ||
15 | - else: | ||
16 | - imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale) | ||
17 | - if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR) | ||
18 | - imageBlank = np.zeros((height, width, 3), np.uint8) | ||
19 | - hor = [imageBlank]*rows | ||
20 | - hor_con = [imageBlank]*rows | ||
21 | - for x in range(0, rows): | ||
22 | - hor[x] = np.hstack(imgArray[x]) | ||
23 | - ver = np.vstack(hor) | ||
24 | - else: | ||
25 | - for x in range(0, rows): | ||
26 | - if imgArray[x].shape[:2] == imgArray[0].shape[:2]: | ||
27 | - imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale) | ||
28 | - else: | ||
29 | - imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale) | ||
30 | - if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR) | ||
31 | - hor= np.hstack(imgArray) | ||
32 | - ver = horx | ||
33 | - return ver | ||
34 | - | ||
35 | -def getContours(img): | ||
36 | - contours,hierarchy = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) | ||
37 | - for cnt in contours: | ||
38 | - area = cv2.contourArea(cnt) | ||
39 | - print(area) | ||
40 | - if area>500: | ||
41 | - cv2.drawContours(imgContour, cnt, -1, (255, 0, 0), 3) | ||
42 | - peri = cv2.arcLength(cnt,True) | ||
43 | - #print(peri) | ||
44 | - approx = cv2.approxPolyDP(cnt,0.02*peri,True) | ||
45 | - print(len(approx)) | ||
46 | - objCor = len(approx) | ||
47 | - x, y, w, h = cv2.boundingRect(approx) | ||
48 | - | ||
49 | - if objCor ==3: objectType ="Tri" | ||
50 | - elif objCor == 4: | ||
51 | - aspRatio = w/float(h) | ||
52 | - if aspRatio >0.98 and aspRatio <1.03: objectType= "Square" | ||
53 | - else:objectType="Rectangle" | ||
54 | - elif objCor>4: objectType= "Circle" | ||
55 | - else:objectType="None" | ||
56 | - | ||
57 | - | ||
58 | - cv2.rectangle(imgContour,(x,y),(x+w,y+h),(0,255,0),2) | ||
59 | - cv2.putText(imgContour,objectType, | ||
60 | - (x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,0.7, | ||
61 | - (0,0,0),2) | ||
62 | - | ||
63 | - | ||
64 | -path = 'TestPhoto/test08.jpg' | ||
65 | -img = cv2.imread(path) | ||
66 | -imgContour = img.copy() | ||
67 | - | ||
68 | -imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) | ||
69 | -imgBlur = cv2.GaussianBlur(imgGray,(7,7),1) # Gaussian smoothing filter for noise(고주파) reduce | ||
70 | -imgCanny = cv2.Canny(imgBlur,50,50) | ||
71 | -getContours(imgCanny) | ||
72 | - | ||
73 | -imgBlank = np.zeros_like(img) | ||
74 | -imgStack = stackImages(0.6,([img,imgGray,imgBlur], | ||
75 | - [imgCanny,imgContour,imgBlank])) | ||
76 | - | ||
77 | -cv2.imshow("Stack", imgStack) | ||
78 | - | ||
79 | -cv2.waitKey(0) |
1 | -[1117/231736.075:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022) | ||
2 | -[1117/231736.171:ERROR:exception_snapshot_win.cc(99)] thread ID 114892 not found in process | ||
3 | -[1117/231736.400:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5) | ||
4 | -[1117/231736.402:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5) | ||
5 | -[1117/231736.402:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5) | ||
6 | -[1117/231736.402:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5) | ||
7 | -[1117/231736.402:ERROR:process_reader_win.cc(151)] SuspendThread: Access is denied. (0x5) | ||
8 | -[1117/231736.402:ERROR:process_reader_win.cc(123)] NtOpenThread: {Access Denied} A process has requested access to an object, but has not been granted those access rights. (0xc0000022) | ||
9 | -[1117/231736.403:ERROR:exception_snapshot_win.cc(99)] thread ID 114896 not found in process |
1 | -from selenium import webdriver | ||
2 | -from bs4 import BeautifulSoup as soups | ||
3 | - | ||
4 | -def search_selenium(search_name, search_path, search_limit) : | ||
5 | - search_url = "https://www.google.com/search?q=" + str(search_name) + "&hl=ko&tbm=isch" | ||
6 | - | ||
7 | - browser = webdriver.Chrome("./chromedriver") | ||
8 | - browser.get(search_url) | ||
9 | - | ||
10 | - image_count = len(browser.find_elements_by_tag_name("img")) | ||
11 | - | ||
12 | - print("로드된 이미지 개수 : ", image_count) | ||
13 | - | ||
14 | - browser.implicitly_wait(2) | ||
15 | - | ||
16 | - for i in range( search_limit ) : | ||
17 | - image = browser.find_elements_by_tag_name("img")[i] | ||
18 | - screenshot_name="./result01/" + str(i) + ".png" | ||
19 | - image.screenshot(screenshot_name) | ||
20 | - browser.save_screenshot(screenshot_name) | ||
21 | - | ||
22 | - browser.close() | ||
23 | - | ||
24 | -if __name__ == "__main__" : | ||
25 | - | ||
26 | - search_name = input("검색하고 싶은 키워드 : ") | ||
27 | - search_limit = int(input("원하는 이미지 수집 개수 : ")) | ||
28 | - search_path = "Your Path" | ||
29 | - # search_maybe(search_name, search_limit, search_path) | ||
30 | - search_selenium(search_name, search_path, search_limit) |
110 KB
11.5 KB
37.5 KB
130 KB
156 KB
10.5 KB
109 KB
52.7 KB
229 KB
23.7 KB
36.8 KB
6.15 KB
45.8 KB
63.2 KB
23.8 KB
11.4 KB
33.4 KB
135 KB
26.9 KB
122 KB
23.9 KB
14.1 KB
12 KB
16.2 KB
47.8 KB
8.77 KB
6.29 KB
195 KB
3.73 KB
6.01 KB
64.2 KB
152 KB
84 KB
91.2 KB
27.4 KB
20.8 KB
25.4 KB
8.09 KB
86.1 KB
59.4 KB
86.1 KB
9.74 KB
6.89 KB
10.5 KB
139 KB
6.55 KB
127 KB
6.47 KB
7.36 KB
7.52 KB
10.4 KB
51.2 KB
6.27 KB
113 KB
8.14 KB
47.4 KB
116 KB
88.7 KB
145 KB
11.6 KB
6.95 KB
7.72 KB
7.58 KB
7 KB
9.54 KB
7 KB
8.82 KB
9.22 KB
6.38 KB
8.62 KB
8.05 KB
11.5 KB
10.2 KB
8.12 KB
8.03 KB
10 KB
442 KB
189 KB
10.8 KB
14.8 KB
6.5 KB
8.07 KB
8.05 KB
6.58 KB
14.6 KB
11.6 KB
8.75 KB
97.6 KB
17.1 KB
9.93 KB
127 KB
10.7 KB
8.07 KB
29.4 KB
97.1 KB
5.57 KB
32.1 KB
8.53 KB
50.2 KB
63.2 KB
14.6 KB
1 | -"""Detects text in the file.""" | ||
2 | -from google.cloud import vision | ||
3 | - | ||
4 | -import io | ||
5 | -import os | ||
6 | -import cv2 | ||
7 | -import numpy as np | ||
8 | - | ||
9 | -smokingZone = 0 | ||
10 | - | ||
11 | -def stackImages(scale,imgArray): #calculate convolution | ||
12 | - rows = len(imgArray) | ||
13 | - cols = len(imgArray[0]) | ||
14 | - rowsAvailable = isinstance(imgArray[0], list) | ||
15 | - width = imgArray[0][0].shape[1] | ||
16 | - height = imgArray[0][0].shape[0] | ||
17 | - if rowsAvailable: | ||
18 | - for x in range ( 0, rows): | ||
19 | - for y in range(0, cols): | ||
20 | - if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]: | ||
21 | - imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale) | ||
22 | - else: | ||
23 | - imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale) | ||
24 | - if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR) | ||
25 | - imageBlank = np.zeros((height, width, 3), np.uint8) | ||
26 | - hor = [imageBlank]*rows | ||
27 | - hor_con = [imageBlank]*rows | ||
28 | - for x in range(0, rows): | ||
29 | - hor[x] = np.hstack(imgArray[x]) | ||
30 | - ver = np.vstack(hor) | ||
31 | - else: | ||
32 | - for x in range(0, rows): | ||
33 | - if imgArray[x].shape[:2] == imgArray[0].shape[:2]: | ||
34 | - imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale) | ||
35 | - else: | ||
36 | - imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale) | ||
37 | - if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR) | ||
38 | - hor= np.hstack(imgArray) | ||
39 | - ver = hor | ||
40 | - return ver | ||
41 | - | ||
42 | -def getContours(img): | ||
43 | - contours,hierarchy = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) | ||
44 | - for cnt in contours: | ||
45 | - area = cv2.contourArea(cnt) | ||
46 | - print(area) | ||
47 | - if area>500: | ||
48 | - cv2.drawContours(imgContour, cnt, -1, (255, 0, 0), 3) | ||
49 | - peri = cv2.arcLength(cnt,True) | ||
50 | - #print(peri) | ||
51 | - approx = cv2.approxPolyDP(cnt,0.02*peri,True) | ||
52 | - print(len(approx)) | ||
53 | - objCor = len(approx) | ||
54 | - x, y, w, h = cv2.boundingRect(approx) | ||
55 | - | ||
56 | - if objCor ==3: objectType ="Tri" | ||
57 | - elif objCor == 4: | ||
58 | - aspRatio = w/float(h) | ||
59 | - if aspRatio >0.98 and aspRatio <1.03: objectType= "Square" | ||
60 | - else:objectType="Rectangle" | ||
61 | - elif objCor>4: objectType= "Sign" | ||
62 | - else:objectType="None" | ||
63 | - | ||
64 | - | ||
65 | - cv2.rectangle(imgContour,(x,y),(x+w,y+h),(0,255,0),2) | ||
66 | - cv2.putText(imgContour,objectType, | ||
67 | - (x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,0.7, | ||
68 | - (0,0,0),2) | ||
69 | - | ||
70 | - if objectType == "Sign": | ||
71 | - smokingZone = 1 | ||
72 | - | ||
73 | -os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="C:/Users/User/Downloads/SmokeDetection-ab1773dcbc6a.json" | ||
74 | -client = vision.ImageAnnotatorClient() | ||
75 | -path = 'TestPhoto/test08.jpg' | ||
76 | - | ||
77 | -with io.open(path, 'rb') as image_file: | ||
78 | - content = image_file.read() | ||
79 | - | ||
80 | -image = vision.Image(content=content) | ||
81 | - | ||
82 | -price_candidate = [] | ||
83 | -card_number_candidate = [] | ||
84 | -date_candidate = [] | ||
85 | - | ||
86 | -response = client.text_detection(image=image) | ||
87 | -texts = response.text_annotations | ||
88 | -print('Texts:') | ||
89 | - | ||
90 | -for text in texts: | ||
91 | - content = text.description | ||
92 | - content = content.replace(',','') | ||
93 | - print('\n"{}"'.format(content)) | ||
94 | - | ||
95 | - if content == 'SMOKING' or content == "NO": | ||
96 | - smokingZone = 1 | ||
97 | - print("This is No Smoking Zone") | ||
98 | - | ||
99 | - | ||
100 | -if response.error.message: | ||
101 | - raise Exception( | ||
102 | - '{}\nFor more info on error messages, check: ' | ||
103 | - 'https://cloud.google.com/apis/design/errors'.format( | ||
104 | - response.error.message)) | ||
105 | - | ||
106 | - | ||
107 | -img = cv2.imread(path) | ||
108 | -imgContour = img.copy() | ||
109 | - | ||
110 | -imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) | ||
111 | -imgBlur = cv2.GaussianBlur(imgGray,(7,7),1) # Gaussian smoothing filter for noise(고주파) reduce | ||
112 | -imgCanny = cv2.Canny(imgBlur,50,50) | ||
113 | -getContours(imgCanny) | ||
114 | - | ||
115 | -if smokingZone == 1: | ||
116 | - imgBlank = cv2.imread('TestPhoto/detected.png') | ||
117 | -else: | ||
118 | - imgBlank = np.zeros_like(img) | ||
119 | - | ||
120 | -imgStack = stackImages(0.6,([img,imgGray,imgBlur], | ||
121 | - [imgCanny,imgContour,imgBlank])) | ||
122 | - | ||
123 | -cv2.imshow("Stack", imgStack) | ||
124 | - | ||
125 | -cv2.waitKey(0) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | -"""Detects text in the file.""" | ||
2 | -from google.cloud import vision | ||
3 | - | ||
4 | -import io | ||
5 | -import os | ||
6 | - | ||
7 | -os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="C:/Users/User/Downloads/SmokeDetection-ab1773dcbc6a.json" | ||
8 | -client = vision.ImageAnnotatorClient() | ||
9 | -path = 'D:/Curricular/5-2/CapstoneDesign2/git/Prj/TestPhoto/test02.jpg' | ||
10 | - | ||
11 | -with io.open(path, 'rb') as image_file: | ||
12 | - content = image_file.read() | ||
13 | - | ||
14 | -image = vision.Image(content=content) | ||
15 | - | ||
16 | -price_candidate = [] | ||
17 | -card_number_candidate = [] | ||
18 | -date_candidate = [] | ||
19 | - | ||
20 | -response = client.text_detection(image=image) | ||
21 | -texts = response.text_annotations | ||
22 | -print('Texts:') | ||
23 | - | ||
24 | -for text in texts: | ||
25 | - content = text.description | ||
26 | - content = content.replace(',','') | ||
27 | - print('\n"{}"'.format(content)) | ||
28 | - | ||
29 | - | ||
30 | -if response.error.message: | ||
31 | - raise Exception( | ||
32 | - '{}\nFor more info on error messages, check: ' | ||
33 | - 'https://cloud.google.com/apis/design/errors'.format( | ||
34 | - response.error.message)) |
1 | -"""Detects Image Part in the file.""" | ||
2 | - | ||
3 | -import io | ||
4 | -import os | ||
5 | - | ||
6 | -# Imports the Google Cloud client library | ||
7 | -from google.cloud import vision | ||
8 | - | ||
9 | -# Instantiates a client | ||
10 | -client = vision.ImageAnnotatorClient() | ||
11 | - | ||
12 | -# The name of the image file to annotate | ||
13 | -file_name = os.path.abspath('D:/Curricular/5-2/CapstoneDesign2/git/Prj/TestPhoto/test02.jpg') | ||
14 | - | ||
15 | -# Loads the image into memory | ||
16 | -with io.open(file_name, 'rb') as image_file: | ||
17 | - content = image_file.read() | ||
18 | - | ||
19 | -image = vision.Image(content=content) | ||
20 | - | ||
21 | -# Performs label detection on the image file | ||
22 | -response = client.label_detection(image=image) | ||
23 | -labels = response.label_annotations | ||
24 | - | ||
25 | -print('Labels:') | ||
26 | -for label in labels: | ||
27 | - print(label.description) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
12 KB
1 | -import os | ||
2 | -import math | ||
3 | -import cv2 | ||
4 | - | ||
5 | -def setLabel(img, pts, label): | ||
6 | - (x, y, w, h) = cv2.boundingRect(pts) | ||
7 | - pt1 = (x, y) | ||
8 | - pt2 = (x + w, y + h) | ||
9 | - cv2.rectangle(img, pt1, pt2, (0, 255, 0), 2) | ||
10 | - cv2.putText(img, label, (pt1[0], pt1[1]-3), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255)) | ||
11 | - | ||
12 | -# 지금 그레이스케일이 된 사진만 인식되는 묘한 경우임 코드 확인 필요 | ||
13 | -#이미지 불러오기 후 그레이스케일 변환 후 이진화 | ||
14 | -src = cv2.imread("shape.png", cv2.IMREAD_COLOR) | ||
15 | - | ||
16 | -gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) | ||
17 | - | ||
18 | -ret, thr = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) | ||
19 | - | ||
20 | -contours, _ = cv2.findContours(thr, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) | ||
21 | - | ||
22 | -for cont in contours: | ||
23 | - approx = cv2.approxPolyDP(cont, cv2.arcLength(cont, True)*0.02, True) | ||
24 | - vtc = len(approx) | ||
25 | - | ||
26 | - if vtc ==3: | ||
27 | - setLabel(src, cont, 'Tri') | ||
28 | - else: | ||
29 | - area = cv2.contourArea(cont) | ||
30 | - _, radius = cv2.minEnclosingCircle(cont) | ||
31 | - | ||
32 | - ratio = radius*radius*math.pi / area | ||
33 | - if int(ratio) ==1: | ||
34 | - setLabel(src, cont, 'Cir') | ||
35 | - | ||
36 | -cv2.imshow('img', src) | ||
37 | -cv2.imshow('binary', thr) | ||
38 | - | ||
39 | -cv2.waitKey() | ||
40 | -cv2.destroyAllWindows() | ||
41 | - | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
63.8 KB
-
Please register or login to post a comment