No edit summary |
No edit summary |
||
Line 9: | Line 9: | ||
The News Graffiti Twitter Bot places speech bubbles on the images taken from the news accounts on twitter. | The News Graffiti Twitter Bot places speech bubbles on the images taken from the news accounts on twitter. | ||
[[Image:SCREEN SHOT 2015-10-19 AT 12.32.00 AM.PNG]] | |||
== code == | |||
import cv2 | |||
import numpy as np | |||
import random | |||
from twitterbot import TwitterBot | |||
import PIL | |||
from PIL import Image, ImageDraw | |||
from sys import argv | |||
import os | |||
debug = True | |||
classifier = "haarcascade_frontalface_default.xml" | |||
faceCascade = cv2.CascadeClassifier(classifier) | |||
def face_detect(image): | |||
""" | |||
Return rectangles of identified face regions | |||
""" | |||
# numpy grayscale image for face detection | |||
array = np.asarray(image) | |||
gray_image = cv2.cvtColor(array, cv2.COLOR_BGR2GRAY) | |||
# tweak this for better results .. | |||
faces = faceCascade.detectMultiScale( | |||
gray_image, | |||
scaleFactor=1.1, | |||
minNeighbors=5, | |||
minSize=(25, 25), | |||
flags=cv2.cv.CV_HAAR_SCALE_IMAGE | |||
) | |||
# convert boxes from from arrays to tuples | |||
boxes = [(x, y, x + w, y + h) for (x, y, w, h) in faces] | |||
return boxes | |||
def face_mark(image): | |||
""" | |||
Mark faces with boxes | |||
""" | |||
# work on a copy | |||
image = image.copy() | |||
# identify boxes | |||
boxes = face_detect(image) | |||
# get drawing context for the current image | |||
ctx = ImageDraw.Draw(image) | |||
# define colors | |||
black = (0, 0, 0, 255) | |||
white = (255,255,255,255) | |||
# draw boxes | |||
for box in boxes: | |||
# draw a black box | |||
ctx.rectangle(box, fill=None, outline=black) | |||
# draw a white box around it | |||
x1, y1, x2, y2 = box | |||
box = x1 - 1, y1 - 1, x2 + 1, y2 + 1 | |||
ctx.rectangle(box, fill=None, outline=white) | |||
return image, boxes | |||
def comic_element(image): | |||
""" | |||
Pasting Speech Bubbles on the Image | |||
""" | |||
#working on a copy of the image | |||
image = image.copy() | |||
# face detection | |||
boxes=face_detect(image) | |||
ctx = ImageDraw.Draw(image) | |||
# grabing random files of img from the folder of speech bubbles | |||
directory = os.path.join(os.path.dirname(__file__), "bubbles") | |||
directory_list = os.listdir('./bubbles/') | |||
# For MAC user - this is important step as iOS adds a hidden file called .DS | |||
directory_list.remove('.DS_Store') | |||
#finding the location for speech bubble and pasting it | |||
for box in boxes: | |||
#coordinate for face box | |||
x1, y1, x2, y2 = box | |||
# taking a random choice from the list created before | |||
one_bubble = random.choice(directory_list) | |||
# adding the name of the file on the rute so it can be opend later... | |||
imgfile = os.path.join(directory, one_bubble) | |||
# open the one_bubble img on the boxes | |||
sBubble= Image.open(imgfile) | |||
#resize the img of the bubble | |||
sBubble = sBubble.resize((160,160), resample=Image.ANTIALIAS) | |||
xS, yS = sBubble.size | |||
# Debugging purpose | |||
#sBubble.show() | |||
# Finding the location for pasting the speech bubble | |||
# Centre Point coordinates | |||
cx = int((x2-x1)*0.5) | |||
# This value is passed to define the box for pasting image and it only takes integer value. | |||
cy = int((y2-y1)*0.5) | |||
# Selecting either right or left side of the face for the bubble placement | |||
x_pos = random.choice((x1,x2)) | |||
if x_pos == x1: | |||
x_pos = x_pos - xS | |||
y_pos =yS*(-1) | |||
else: | |||
y_pos =yS | |||
# Bubble box defines the size and place for pasting speech bubble on face | |||
bubblebox = (x_pos,cy,x_pos+xS,cy+yS) | |||
#left, upper coordinate | |||
px1 = int(r*np.math.cos(angle)) | |||
py1 = int(r*np.math.sin(angle)+yS) | |||
image.paste(sBubble, bubblebox, sBubble) | |||
#image.show() | |||
return image, boxes | |||
if __name__ == '__main__': | |||
""" | |||
Loading Image | |||
""" | |||
src = Image.open("face1.jpg") | |||
# face detection | |||
boxes=face_detect(src) | |||
img,box = comic_element(src) | |||
img.show() | |||
img.save("test_img.jpg") | |||
Revision as of 22:44, 18 October 2015
Shubhra bhatt
- E-mail : shubhra.bhatt@uni-weimar.de
- Works Examples : http://www.openprocessing.org/user/45747
News Graffiti Twitter Bot
The News Graffiti Twitter Bot places speech bubbles on the images taken from the news accounts on twitter.
code
import cv2 import numpy as np import random from twitterbot import TwitterBot import PIL from PIL import Image, ImageDraw from sys import argv import os
debug = True classifier = "haarcascade_frontalface_default.xml" faceCascade = cv2.CascadeClassifier(classifier)
def face_detect(image):
"""
Return rectangles of identified face regions
"""
# numpy grayscale image for face detection array = np.asarray(image) gray_image = cv2.cvtColor(array, cv2.COLOR_BGR2GRAY)
# tweak this for better results ..
faces = faceCascade.detectMultiScale(
gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(25, 25), flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)
# convert boxes from from arrays to tuples
boxes = [(x, y, x + w, y + h) for (x, y, w, h) in faces]
return boxes
def face_mark(image):
"""
Mark faces with boxes
"""
# work on a copy image = image.copy()
# identify boxes boxes = face_detect(image)
# get drawing context for the current image ctx = ImageDraw.Draw(image)
# define colors black = (0, 0, 0, 255) white = (255,255,255,255)
# draw boxes for box in boxes:
# draw a black box ctx.rectangle(box, fill=None, outline=black)
# draw a white box around it x1, y1, x2, y2 = box box = x1 - 1, y1 - 1, x2 + 1, y2 + 1 ctx.rectangle(box, fill=None, outline=white)
return image, boxes
def comic_element(image): """ Pasting Speech Bubbles on the Image """
#working on a copy of the image image = image.copy()
# face detection
boxes=face_detect(image)
ctx = ImageDraw.Draw(image)
# grabing random files of img from the folder of speech bubbles directory = os.path.join(os.path.dirname(__file__), "bubbles") directory_list = os.listdir('./bubbles/')
# For MAC user - this is important step as iOS adds a hidden file called .DS directory_list.remove('.DS_Store')
#finding the location for speech bubble and pasting it
for box in boxes:
#coordinate for face box
x1, y1, x2, y2 = box
# taking a random choice from the list created before
one_bubble = random.choice(directory_list) # adding the name of the file on the rute so it can be opend later... imgfile = os.path.join(directory, one_bubble)
# open the one_bubble img on the boxes sBubble= Image.open(imgfile)
#resize the img of the bubble sBubble = sBubble.resize((160,160), resample=Image.ANTIALIAS) xS, yS = sBubble.size # Debugging purpose #sBubble.show()
# Finding the location for pasting the speech bubble # Centre Point coordinates
cx = int((x2-x1)*0.5) # This value is passed to define the box for pasting image and it only takes integer value. cy = int((y2-y1)*0.5)
# Selecting either right or left side of the face for the bubble placement
x_pos = random.choice((x1,x2))
if x_pos == x1: x_pos = x_pos - xS y_pos =yS*(-1) else: y_pos =yS
# Bubble box defines the size and place for pasting speech bubble on face bubblebox = (x_pos,cy,x_pos+xS,cy+yS)
#left, upper coordinate px1 = int(r*np.math.cos(angle)) py1 = int(r*np.math.sin(angle)+yS) image.paste(sBubble, bubblebox, sBubble) #image.show()
return image, boxes
if __name__ == '__main__':
""" Loading Image """ src = Image.open("face1.jpg")
- face detection
boxes=face_detect(src) img,box = comic_element(src) img.show() img.save("test_img.jpg")
First Python Image
Code
""" My Bot-Bot """
def setup():
size(400, 400) background(250, 250, 250) noStroke() fill(250, 138, 120) global pX pX = width/2 global pY pY = 80
def draw():
background(250, 250, 250) # Head , Eye & Body triangle(pX, pY + 80, pX - 80, pY, pX + 80, pY) fill(250, 240, 250) ellipse(pX - 20, pY + 20, 10, 10) ellipse(pX + 20, pY + 20, 10, 10) rect(pX - 10, pY + 50, 20, 4) fill(250, 138, 120) # Left Arm pushMatrix() translate(pX - 50, pY + 80) rect(0, 0, 100, 150) triangle(0, 0, -50, 80, -60, 50) ellipse(50, 180, 80, 80) fill(250, 240, 250) ellipse(50, 180, 60, 60) # Right Arm popMatrix() fill(250, 138, 120) pushMatrix() translate(pX + 50, pY + 80) scale(-1, 1) triangle(0, 0, -50, 80, -60, 50) popMatrix() saveFrame("My Bot-Bot.png")
First Python Animation
Code
""" My Bot-Bot animation """
def setup():
size(400, 400) background(250, 250, 250) stroke(255, 240, 250) fill(250, 138, 120) global pX pX = 80 global pY pY = 80 global prV prV=10
def draw():
bgR = random(50,200) bgG = random(50,150) bgB = random(240,250) background(bgR,bgG,bgB) global prV global pX if pX>0 and pX<width: pX=pX+10 elif pX>width: pX=pX-100 else: pX=80 # Head , Eye & Body triangle(pX, pY + 80, pX - 80, pY, pX + 80, pY) fill(250, 240, 250) ellipse(pX - 20, pY + 20, 10, 10) ellipse(pX + 20, pY + 20, 10, 10) rect(pX - 10, pY + 50, 20, 4)
fill(250, 138, 120) # Wheel pushMatrix() translate(pX - 50, pY + 80) rect(0, 0, 100, 150) ellipse(50, 180, 80, 80) fill(bgR, bgG, bgB) ellipse(50, 180, 60, 60) fill(250, 138, 120) # Left Arm rotate(-PI/8 * sin(frameCount * 0.1)) triangle(0, 0, -50, 80, -60, 50) # Right Arm popMatrix() fill(250, 138, 120) pushMatrix() translate(pX + 50, pY + 80) rotate(PI/8 * sin(frameCount * 0.1)) scale(-1, 1) triangle(0, 0, -50, 80, -60, 50) popMatrix() delay(80)
saveFrame("bot###.png")