Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
22_23-J 35
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
22_23-J 35
22_23-J 35
Commits
f48f6c74
Commit
f48f6c74
authored
May 11, 2023
by
Hashani Perera
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update code
parent
30cdbcaf
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
256 additions
and
0 deletions
+256
-0
Access_control_system.py
Access_control_system.py
+256
-0
No files found.
Access_control_system.py
0 → 100644
View file @
f48f6c74
# -*- coding: utf-8 -*-
"""Smart_door_lock
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1wmlnG3tDfHSrv9bvrnCxesrN4mApPCgl
#Preprocessing
#1. Resizing
#2. flatten
import os
import matplotlib.pyplot as plt
import numpy as np
from skimage.io import imread
from skimage.transform import resize
from skimage import exposure
target = []
images = []
flat_data = []
DATADIR = '/content/sample_data/images'
CATEGORIES = ['user', 'other']
# Preprocessing: Image Enhancement
for category in CATEGORIES:
class_num = CATEGORIES.index(category) # label encoding
path = os.path.join(DATADIR, category) # create path to use all images
for img in os.listdir(path):
img_array = imread(os.path.join(path, img))
# print(img_array.shape)
# plt.imshow(img_array)
img_resized = resize(img_array, (150, 150, 3)) # Normalizes to 0 to 1
# Contrast Stretching
p2, p98 = np.percentile(img_resized, (2, 98))
img_enhanced = exposure.rescale_intensity(img_resized, in_range=(p2, p98))
# Histogram Equalization
img_enhanced = exposure.equalize_hist(img_enhanced)
flat_data.append(img_enhanced.flatten())
images.append(img_enhanced)
target.append(class_num)
flat_data = np.array(flat_data)
target = np.array(target)
images = np.array(images)
"""
#Preprocessing
#1. Resizing
#2. flatten
import
os
import
matplotlib.pyplot
as
plt
import
numpy
as
np
from
skimage.io
import
imread
from
skimage.transform
import
resize
target
=
[]
images
=
[]
flat_data
=
[]
DATADIR
=
'/content/sample_data/images'
CATEGORIES
=
[
'user'
,
'other'
]
for
category
in
CATEGORIES
:
class_num
=
CATEGORIES
.
index
(
category
)
#label encoding
path
=
os
.
path
.
join
(
DATADIR
,
category
)
#create path to use all images
for
img
in
os
.
listdir
(
path
):
try
:
img_array
=
imread
(
os
.
path
.
join
(
path
,
img
))
#print(img_array.shape)
#plt.imshow(img_array)
img_resized
=
resize
(
img_array
,(
150
,
150
,
3
))
#Normalizes to 0 to 1
flat_data
.
append
(
img_resized
.
flatten
())
images
.
append
(
img_resized
)
target
.
append
(
class_num
)
except
:
print
(
f
"Unable to read image {img_path}"
)
flat_data
=
np
.
array
(
flat_data
)
target
=
np
.
array
(
target
)
images
=
np
.
array
(
images
)
len
(
flat_data
[
0
])
unique
,
count
=
np
.
unique
(
target
,
return_counts
=
True
)
plt
.
bar
(
CATEGORIES
,
count
)
# split data into Training and Testing
from
sklearn.model_selection
import
train_test_split
X_train
,
X_test
,
y_train
,
y_test
=
train_test_split
(
flat_data
,
target
,
test_size
=
0.3
,
random_state
=
109
,
stratify
=
target
)
unique_train
,
count_train
=
np
.
unique
(
y_train
,
return_counts
=
True
)
print
(
f
"Unique classes in y_train: {unique_train}"
)
# After the loop for reading and processing images
print
(
f
"Total images read: {len(images)}"
)
print
(
f
"Total target values: {len(target)}"
)
unique_classes
,
count_classes
=
np
.
unique
(
target
,
return_counts
=
True
)
print
(
f
"Unique classes in target: {unique_classes}"
)
print
(
f
"Count of images per class: {count_classes}"
)
from
sklearn.model_selection
import
GridSearchCV
,
StratifiedKFold
from
sklearn.svm
import
SVC
# Define the parameter grid
param_grid
=
[
{
'C'
:
[
1
,
10
,
100
,
1000
],
'kernel'
:
[
'linear'
]},
{
'C'
:
[
1
,
10
,
100
,
1000
],
'gamma'
:
[
0.001
,
0.0001
],
'kernel'
:
[
'rbf'
]},
]
# Create the SVM model with probability=True
svc
=
SVC
(
probability
=
True
)
# Create a StratifiedKFold cross-validator
cv
=
StratifiedKFold
(
n_splits
=
5
)
# Set up the GridSearchCV with the SVM model, parameter grid, and stratified cross-validator
clf
=
GridSearchCV
(
svc
,
param_grid
,
cv
=
cv
)
# Fit the model to the training data
clf
.
fit
(
X_train
,
y_train
)
y_pred
=
clf
.
predict
(
X_test
)
y_pred
y_test
from
sklearn.metrics
import
accuracy_score
,
confusion_matrix
accuracy_score
(
y_pred
,
y_test
)
confusion_matrix
(
y_pred
,
y_test
)
# save the model using pickle library
import
pickle
pickle
.
dump
(
clf
,
open
(
'img_model.p'
,
'wb'
))
model
=
pickle
.
load
(
open
(
'img_model.p'
,
'rb'
))
from
skimage.io
import
imread
from
skimage.transform
import
resize
import
numpy
as
np
import
urllib.request
import
requests
from
google.colab
import
files
import
matplotlib.pyplot
as
plt
# Ask the user to upload an image from their computer or enter a URL
while
True
:
choice
=
input
(
"Enter 'u' to upload an image from your computer, or 'b' to enter a URL: "
)
if
choice
==
'u'
:
# Upload an image from the computer
flat_data
=
[]
uploaded
=
files
.
upload
()
for
filename
in
uploaded
.
keys
():
img
=
imread
(
filename
)
img_resized
=
resize
(
img
,
(
150
,
150
,
3
))
flat_data
.
append
(
img_resized
.
flatten
())
flat_data
=
np
.
array
(
flat_data
)
break
elif
choice
==
'b'
:
# Enter a URL to load an image from the internet
flat_data
=
[]
url
=
input
(
"Please enter a valid image URL: "
)
try
:
# Check if the URL is valid and the image can be loaded
response
=
requests
.
get
(
url
)
response
.
raise_for_status
()
img
=
imread
(
urllib
.
request
.
urlopen
(
url
),
mode
=
'RGB'
)
img_resized
=
resize
(
img
,
(
150
,
150
,
3
))
flat_data
.
append
(
img_resized
.
flatten
())
flat_data
=
np
.
array
(
flat_data
)
break
except
:
print
(
"Invalid URL or unable to load the image. Please try again."
)
else
:
print
(
"Invalid choice. Please try again."
)
# Show the loaded image and make a prediction using the loaded model
y_out
=
model
.
predict
(
flat_data
)
y_out
=
CATEGORIES
[
y_out
[
0
]]
print
(
f
'PREDICTED OUTPUT: {y_out}'
)
# Display the loaded image
if
choice
==
'u'
:
img
=
imread
(
list
(
uploaded
.
keys
())[
0
])
else
:
img
=
imread
(
urllib
.
request
.
urlopen
(
url
),
mode
=
'RGB'
)
plt
.
imshow
(
img
)
# Commented out IPython magic to ensure Python compatibility.
# %%writefile app.py
#
# import streamlit as st
# import numpy as np
# from skimage.io import imread
# from skimage.transform import resize
# import pickle
# from PIL import Image
# st.title('Smart Door Lock Authentication')
# st.text('Upload the Image')
# model=pickle.load(open('img_model.p','rb'))
# uploaded_file =st.file_uploader("choose an image ...",type="jpg")
#
#
#
#
# if uploaded_file is not None:
#
# img =Image.open(uploaded_file)
# st.image(img,caption='uploaded Image')
#
# if st.button('PREDICT'):
#
#
# CATEGORIES = ['user','other']
#
# st.write('Result...')
# flat_data=[]
# img=np.array(img)
# img_resized =resize(img,(150,150,3))
# flat_data.append(img_resized.flatten())
# flat_data=np.array(flat_data)
# print(img.shape)
#
# y_out=model.predict(flat_data)
# y_out=CATEGORIES[y_out[0]]
#
# st.title(f' PREDICTED OUTPUT: {y_out}')
# q= model.predict_proba(flat_data)
# for index, item in enumerate(CATEGORIES):
# st.write(f' {item} :{q[0][index]*100}%')
#
#
#
#
#
#
#
!
pip
install
streamlit
!
streamlit
run
app
.
py
&
npx
localtunnel
--
port
8501
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment