Last active
November 9, 2022 18:18
-
-
Save Mynuddin-dev/0de264a2ab99d9ad344c91d3b5ab2584 to your computer and use it in GitHub Desktop.
Skin Detection with Naive Bayes on Colab
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
import os | |
import numpy as np | |
import csv | |
import pandas as pd | |
dir = "/content/drive/MyDrive/Applied_data_Science" | |
def absoluteFilePaths(directory): | |
filePaths = [] | |
for dirpath,_,filenames in os.walk(directory): | |
for f in filenames: | |
filePaths.append(os.path.abspath(os.path.join(dirpath, f))) | |
return filePaths | |
imagePaths = absoluteFilePaths("/content/drive/MyDrive/Applied_data_Science/Pratheepan_Dataset/FacePhoto") | |
maskPaths = absoluteFilePaths("/content/drive/MyDrive/Applied_data_Science/Ground_Truth/GroundT_FacePhoto") | |
skinPixelNumber = np.zeros((256,256,256)) | |
nonskinPixelNumber = np.zeros((256,256,256)) | |
## calculate skin and nonskinpixel number | |
for i in range(len(imagePaths)): | |
image = cv2.imread(imagePaths[i]) | |
mask_image = cv2.imread(maskPaths[i]) | |
print(image.shape) | |
for y in range(image.shape[1]): | |
for x in range(image.shape[0]): | |
blue, green, red = image[x,y] | |
maskBlue, maskGreen , maskRed = mask_image[x,y] | |
if(maskRed>250 and maskGreen>250 and maskBlue>250): ##check the rgb combination is greater skin or not | |
skinPixelNumber[red][green][blue] += 1 ## incrementing skinPixekNumber value(default = 0) of that rgb combination.. like, skinPixelNumber[10][20][30] += 1 | |
else: | |
nonskinPixelNumber[red][green][blue] += 1 ##incrementing non_skin value(default = 0) of that rgb combination.. like, nonskinPixelNumber[10][20][30] += 1 | |
print('image no: ' + str(i) + ' processed Complete!') | |
## Calculate Probability | |
skinPixels = 0 | |
nonSkinPixels = 0 | |
probability = 0 | |
for i in range(256): | |
for j in range(256): | |
for k in range(256): | |
skinPixelNumber[i][j][k] += 1 ## Laplacian Smothing | |
skinPixels += skinPixelNumber[i][j][k] | |
nonskinPixelNumber[i][j][k] += 1 | |
nonSkinPixels += nonskinPixelNumber[i][j][k] | |
probabilityOfSkin = skinPixels / (skinPixels + nonSkinPixels) | |
f = open("./mynu.text", 'w') | |
f.write("") | |
for i in range(256): | |
for j in range(256): | |
for k in range(256): | |
probability = skinPixelNumber[i][j][k] * probabilityOfSkin / (skinPixelNumber[i][j][k] + nonskinPixelNumber[i][j][k]) | |
f.write(str(probability) + "\n") | |
# print(probability) | |
print("Process Complete") | |
f.close() | |
ratio = np.zeros((256,256,256)) | |
with open("/content/mynu.text", "r") as file: | |
for i in range(256): | |
for j in range(256): | |
for k in range(256): | |
probability = file.readline() | |
ratio[i][j][k] = float(probability) | |
image = cv2.imread("/content/corey.jpg") | |
for y in range(image.shape[1]): | |
for x in range(image.shape[0]): | |
blue , green, red = image[x,y] | |
if(ratio[red][green][blue] > .12): | |
image[x,y]= (250, 250, 250) | |
else: | |
image[x,y] = (0, 0, 0) | |
print("-", end="") | |
cv2.imwrite("mask.jpg",image) | |
## Orginal Image | |
from PIL import Image | |
img = Image.open("/content/corey.jpg") | |
img | |
## Masked image | |
from PIL import Image | |
img = Image.open("/content/mask.jpg") | |
img |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment