Skip to content

Instantly share code, notes, and snippets.

@Mynuddin-dev
Last active November 9, 2022 18:18
Show Gist options
  • Save Mynuddin-dev/0de264a2ab99d9ad344c91d3b5ab2584 to your computer and use it in GitHub Desktop.
Save Mynuddin-dev/0de264a2ab99d9ad344c91d3b5ab2584 to your computer and use it in GitHub Desktop.
Skin Detection with Naive Bayes on Colab
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